センサーサービスチュートリアル

このドキュメントではセンサーサービスについて扱う。Androidでは標準的なセンサーとして以下のセンサーにアクセスするライブラリを用意している。ただし、全ての機器が全てのセンサーを準備しているわけではないため、ここでは加速度センサーと方向センサー(地表に対してどういった方向に機器を向けているかのセンサー)を使用する。

実際の例を見てみよう。センサーはシステムサービスとして提供されているため、ActivityまたはContextクラスのgetSystemServiceを使用してセンサーマネージャを取得し、その後方向センサーのリストを取得している。一つのデバイスに複数のセンサーが搭載されている場合には複数が帰ってくるし、一つもセンサーが搭載されていない場合は一つも帰ってこない。そのため、マイナーなセンサーを使う場合や特殊なデバイスを使う場合はきちんとエラーハンドリングが必要となる。その後、registerListenerでセンサーが通知するイベントのリスナーを設定している。最後の引数はどれだけ優先してイベントを通知するかの目安となる。また、リスナーはセンサーからの測定値を通知するonSensorChangedメソッドと精度が変化した事を通知するonAccuracyChangedメソッドをオーバーライドする必要がある。

    //センサーマネージャの取得
    final SensorManager accelSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
    //方向センサー
    final List<Sensor> orientSensors = accelSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    final SensorEventListener listener = new SensorEventListener() {
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
        @Override
        public void onSensorChanged(SensorEvent event) {
            //センサー受信時の処理
            //通知内容はhttp://developer.android.com/reference/android/hardware/SensorEvent.htmlを参照。
        }
    };
    accelSensorManager.registerListener(listener, orientSensors.get(0), SensorManager.SENSOR_DELAY_GAME);
	

参考資料