目次へ
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); そのタイプのすべてのセンサーを取り出すなら List |
センサータイプの定数
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(リスナ); |
にほんブログ村
0 件のコメント:
コメントを投稿