2016年3月21日月曜日

Androidのセンサーを使う

目次へ



Androidでは、いろいろなセンサーを使うことができますが、使い方が統一されているため、一つのセンサーの使い方を覚えれば別のセンサーも同じように使えます。
メインの画面が表示されている間センサーからデータを受け取るというつもりで次のようなステップを考えました。

メイン画面のonCreateで
 1.センサーマネージャ取得
 2.センサー取得
 3.リスナインスタンス作成

メイン画面のonResumeで
 4.センサーのリスナを登録する

メイン画面のonPauseで
 5.リスナの登録を解除する


■■■■センサーマネージャ取得■■■■

センサーを使うには、SensorManagerオブジェクトが必要です。
SensorManager sm;
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);



■■■■センサー取得■■■■

上で作成したSensorManagerオブジェクトを使って必要なセンサーを取得します。
デフォルトの加速度センサーを取り出すなら
Sensor accele;
accele = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

そのタイプのすべてのセンサーを取り出すなら
Listlist;
list = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);


センサータイプの定数
TYPE_ALL 全てのセンサー
TYPE_ACCELEROMETER 加速度センサー
TYPE_GRAVITY 重力センサー
TYPE_GYROSCOPE ジャイロセンサー
TYPE_LIGHT 光センサー
TYPE_LINEAR_ACCELERATION 単方向加速センサー
TYPE_MAGNETIC_FIELD 地磁気センサー
TYPE_PRESSURE 圧力センサー
TYPE_PROXIMITY 近接センサー
TYPE_ROTATION_VECTOR 回転ベクトルセンサー



■■■■リスナ作成■■■■

次にセンサーのリスナを作ります。
Activity自体をimplements SensorEventListenerとすれば簡単です。
class Xx implements SensorEventListener {
    //センサ精度が変更された時呼ばれる
    public void onAccuracyChanged(Sensor sensor, int accuracy) { }

    //センサ値が変更された時呼ばれる
    public void onSensorChanged(SensorEvent event) {
        event.values[0]~[2]にセンサーの値が格納されているので
        この値を使ってプログラムを書きます
    }
}



■■■■リスナ登録■■■■

メインのActivityが表示された時にセンサーからの値を使うのなら、onResumeメソッドで次のように、リスナを登録すればよいでしょう。
smはSensorManager、acceleはSensorです。
また、第3引数はイベントの発生間隔で次のような値が指定できます。
SENSOR_DELAY_FASTEST 最も短い間隔
SENSOR_DELAY_GAME ゲームに最適。FASTESTの次に短い間隔
SENSOR_DELAY_UI user interfaceに最適。GAMEの次に短い間隔
SENSOR_DELAY_NORMAL スクリーン方向の変化などに最適。最もゆっくり
数字 ミリ秒単位で自分で設定


sm.registerListener(リスナ,accele, SensorManager.SENSOR_DELAY_NORMAL); 



■■■■リスナ登録解除■■■■

メインのActivityが隠れた時に解除するなら、onPauseメソッドで次のように登録を解除すればよいと思います。
smはSensorManagerです。
sm.unregisterListener(リスナ);






にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

0 件のコメント:

コメントを投稿