Androidのジャイロセンサーの値の取得
Androidのジャイロセンサーの値取得するには
Sensor.TYPE_GYROSCOPE
に対応するセンサーを取得し
SensorEventListenerを設定することで変化を検出できる
まずは、SensorManagerの取得
これは、
Context.getSystemService()
によりSensorManagerのインスタンスを取得することでできる
1 | mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); |
次に、ジャイロセンサーの登録
SensorManagerクラスの
registerListener()でジャイロセンサーのリスナーを登録
1 2 3 4 5 6 7 8 9 10 11 12 13 | @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()で行う
1 2 3 4 5 6 7 | @Override public void onPause(){ //ジャイロセンサーリスナー解除 mSensorManager.unregisterListener( this ); super .onPause(); } |
そして、ジャイロセンサーの値取得
これは、
SensorEventListenerを継承し
onSensorChanged()へ
センサーの値が変更されたときの処理を実装することでできる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | @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つをあわせることで、モーションセンサーにできる