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つをあわせることで、モーションセンサーにできる