端末の傾きと東西南北を検出するコードの覚書き。ただし、ここで紹介する方法は、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)。