[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

2010年9月

      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    

自作フリーソフトウェア