Androidのジャイロセンサーの値の取得
Androidのジャイロセンサーの値取得するには
Sensor.TYPE_GYROSCOPE
に対応するセンサーを取得し
SensorEventListenerを設定することで変化を検出できる
まずは、SensorManagerの取得
これは、
Context.getSystemService()
によりSensorManagerのインスタンスを取得することでできる
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
次に、ジャイロセンサーの登録
SensorManagerクラスの
registerListener()でジャイロセンサーのリスナーを登録
@Override
protected void onResume(){
super.onResume();
//ジャイロセンサーのリスナー登録
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
if(sensors.size()>0){
Sensor s = sensors.get(0);
mSensorManager.registerListener(this, s, SensorManager.SENSOR_DELAY_UI);
}
}
ジャイロセンサーの解除は
SensorManagerクラスの
unregisterListener()で行う
@Override
public void onPause(){
//ジャイロセンサーリスナー解除
mSensorManager.unregisterListener(this);
super.onPause();
}
そして、ジャイロセンサーの値取得
これは、
SensorEventListenerを継承し
onSensorChanged()へ
センサーの値が変更されたときの処理を実装することでできる
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
@Override
public void onSensorChanged(SensorEvent event){
//ジャイロセンサーの値取得
if(event.sensor.getType() == Sensor.TYPE_GYROSCOPE){
//TextViewインスタンス取得
TextView dataX = (TextView)findViewById(R.id.dataX);
TextView dataY = (TextView)findViewById(R.id.dataY);
TextView dataZ = (TextView)findViewById(R.id.dataZ);
//取得した値をTextViewへセット
dataX.setText(String.valueOf(event.values[0]));
dataY.setText(String.valueOf(event.values[1]));
dataZ.setText(String.valueOf(event.values[2]));
}
}
なお、ジャイロセンサーから取得できる値は
角速度になるため
これを積分すれば角度を求めることができる
単位は、rad/sec
加速度センサーとジャイロセンサーの使い分けは
加速度センサーは移動速度
ジャイロセンサーは、姿勢などを求めるのに使う
あとは、傾きなどの検知
この2つをあわせることで、モーションセンサーにできる