端末の傾きと東西南北を検出するコードの覚書き。ただし、ここで紹介する方法は、Android 2.2 (API Level 8) から非推奨(deprecated)とされているので、あくまで参考程度に。
SensorManager
を取得するSensorManager
に、TYPE_ORIENTATION センサのリスナ SensorEventListener
を登録するSensorEventListener
の onSensorChanged
メンバ関数がコールバックされるSensorManager
から SensorEventListener
を外すpackage com.example.helloworld; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.content.Context; import android.hardware.SensorManager; import android.hardware.SensorEventListener; import android.hardware.SensorEvent; import android.hardware.Sensor; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private SensorManager mSensorManager = null; private SensorEventListener mSensorEventListener = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSensorManager = (SensorManager) getSystemService( Context.SENSOR_SERVICE ); mSensorEventListener = new SensorEventListener() { public void onSensorChanged (SensorEvent event) { if( event.sensor.getType() == Sensor.TYPE_ORIENTATION ) { String buf = "---------- Orientation --------\n" + String.format( "方位角\n\t%f\n", event.values[0] ) + String.format( "前後の傾斜\n\t%f\n", event.values[1] ) + String.format( "左右の傾斜\n\t%f\n", event.values[2] ); TextView t = (TextView) findViewById( R.id.textView1 ); t.setText( buf ); } } public void onAccuracyChanged (Sensor sensor, int accuracy) {} }; } protected void onStart () { // ⇔ onStop super.onStart(); mSensorManager.registerListener( mSensorEventListener, mSensorManager.getDefaultSensor( Sensor.TYPE_ORIENTATION ), SensorManager.SENSOR_DELAY_UI ); } protected void onStop() { // ⇔ onStart super.onStop(); mSensorManager.unregisterListener( mSensorEventListener ); } }
SensorManager
を取得します(概要の手順.1)SensorEventListener
のインスタンスを生成しています。まだ LocationManager
に登録されていないので情報は取得できません。
SensorManager
に SensorEventListener
を登録して、センサ値の取得を始めます(概要の手順.2)。