[Android] センサーマネージャー(SensorManager)

| トラックバック(0) |

センサーマネージャーのサンプルコードです。

public class SensorSample extends Activity implements SensorListener {
    private SensorManager mSensorManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    }
    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this,
SensorManager.SENSOR_ORIENTATION,
SensorManager.SENSOR_DELAY_FASTEST);
}

@Override
protected void onStop() {
mSensorManager.unregisterListener(this);
super.onStop();
}

@Override
public void onSensorChanged(int arg0, float[] arg1) {
switch (arg0) {
case SensorManager.SENSOR_ORIENTATION: // 1
// arg1[0]
// arg1[1]
// arg1[2]
break;
}
}
}

SensorManagerのインスタンスを取得するには、ActivityクラスのgetSystemService()を呼び出します。
センサーイベントをリスニングするには、同インスタンスに対し、registerListener()を呼び出します。
このとき、
第1引数には、SensorListnerを実装したクラスのインスタンス、
第2引数には、リスニングしたいセンサーの種類(をビットフィールドで指定)、
第3引数には、リスニングする頻度、
を指定します。
すると、SensorListnerを実装したクラスのインスタンスのonSensorChanged()が呼び出されますので、
引数として渡された、arg1[]を参照することで、センサーの値にアクセスできます。

参考となるサンプルコードは、ApiDemos\src\com\example\android\apis\os\Sensors.javaです。

※2009/04/07追記:public void onAccuracyChanged(int sensor, int accuracy) {} も必要です。
※2009/04/30追記:unregisterListener()を呼び出すのは、OnStop()よりも、onPause()の方が正しい?かも
※2009/04/30追記:更新された内容を含む新しい記事「[Android] Redesigned Sensor Manager APIs(Android1.5) | The type SensorListener is deprecated - adakoda」があります

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/96

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31