概ねタイトル通りです。
加速度って何?という方もいらっしゃるかもしれませんが、
要は端末を上下左右にビュンビュン振ったとして、どの方向にどれくらい振ったのか調べられる機能です(^ω^)
この機能はエミュレータでは利用できないのでアンドロイド端末が必須となります。
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弾「巫女さんおみくじ」公開しました | 桜花満開