概ねタイトル通りです。
加速度って何?という方もいらっしゃるかもしれませんが、
要は端末を上下左右にビュンビュン振ったとして、どの方向にどれくらい振ったのか調べられる機能です(^ω^)
この機能はエミュレータでは利用できないのでアンドロイド端末が必須となります。
Androidで使用出来る様々なセンサー
Androidには色々な種類のセンサが使えるようになっています。
例)
- 加速度センサー
- 地磁気センサー
- 傾きセンサー
- ジャイロセンサー
- 温度センサー
今回はその中にある「加速度センサー」を使ってみます。
SensorManagerインスタンスを取得してイベントを登録する
流れとしては
・getSystemServiceでSensorManagerを取得
・SensorManagerから加速度センサーを取得
・イベントを登録
といった感じだと思います。
インポートするのは以下の4行です。
import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager;
SensorManagerインスタンス取得とイベントリスナを登録の例です。
加速度センサは TYPE_ACCELEROMETER 、
アクセロメーター(加速度計)という定数を使って取得します。
SensorManager manager = (SensorManager)getSystemService(SENSOR_SERVICE); Sensor sensor = manager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER ); manager.registerListener( 【イベントリスナー】 , sensor, SensorManager.SENSOR_DELAY_NORMAL );
上記の【イベントリスナー】の部分には、
SensorEventListenerインターフェースを実装したクラスを用意します。
class SampleSensorEventListener implements SensorEventListener{
@Override
public void onSensorChanged(SensorEvent e) {
if(e.sensor.getType() == Sensor.TYPE_ACCELEROMETER ){
/* 加速度センサを取得する処理 */
}
}
}
加速度の値は、SensorEvent e の次のフィールドを使って取得します。
| e.values[0] | X軸方向の加速度(左右方向 右方向が正) |
|---|---|
| e.values[1] | Y軸方向の加速度(上下方向 上方向が正) |
| e.values[2] | Z軸方向の加速度(前後方向 前面方向が正) |
サンプルプログラム
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Sample20120704Activity extends Activity {
private SensorManager manager;
private Sensor sensor;
private SensorEventListener sample_listener;
TextView tv_x;
TextView tv_y;
TextView tv_z;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
setContentView( ll );
tv_x = new TextView(this);
tv_y = new TextView(this);
tv_z = new TextView(this);
ll.addView(tv_x);
ll.addView(tv_y);
ll.addView(tv_z);
sample_listener = new SampleSensorEventListener();
}
@Override
protected void onResume(){
super.onResume();
manager = (SensorManager)getSystemService(SENSOR_SERVICE);
sensor = manager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );
manager.registerListener(sample_listener, sensor, SensorManager.SENSOR_DELAY_NORMAL );
}
@Override
protected void onPause(){
super.onPause();
manager.unregisterListener(sample_listener);
}
class SampleSensorEventListener implements SensorEventListener{
@Override
public void onSensorChanged(SensorEvent e) {
if(e.sensor.getType() == Sensor.TYPE_ACCELEROMETER ){
String str_x = "X軸の加速度:" + e.values[0];
tv_x.setText( str_x );
String str_y = "Y軸の加速度:" + e.values[1];
tv_y.setText( str_y );
String str_z = "Z軸の加速度:" + e.values[2];
tv_z.setText( str_z );
}
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
}
}
【実行結果】

ピンバック: 【Andoird】サンプルアプリ第2弾「巫女さんおみくじ」公開しました | 桜花満開