SensorEventListener インタフェースの実装
public class MainActivity extends Activity implements SensorEventListener {
...
}
SensorManager でセンサーのオブジェクトを取得
SensorManager sm;
@Override
protected void onResume() {
super.onResume();
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
List<Sensor> sensors =
sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
if (0 < sensors.size()) {
sm.registerListener(this, sensors.get(0),
SensorManager.SENSOR_DELAY_NORMAL);
}
}
登録したリスナは onPause() メソッド内で解除します。
@Override
protected void onPause() {
super.onPause();
sm.unregisterListener(this);
}
地磁気センサーの値を取得
地磁気センサーの値に変化があった場合の処理を onSensorChanged() メソッド内に記述します。
@Override
public void onSensorChanged(SensorEvent event) {
mx = event.values[0];
my = event.values[1];
mz = event.values[2];
}
地磁気センサーの値を表示するアプリの作成
以上を踏まえ Android デバイスに搭載されている地磁気センサーから取得した値を画面に表示するアプリを作成しました。
package com.example.magnetic;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends Activity implements Runnable, SensorEventListener {
SensorManager sm;
TextView tv;
Handler h;
float mx, my, mz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
setContentView(ll);
tv = new TextView(this);
ll.addView(tv);
h = new Handler();
h.postDelayed(this, 500);
}
@Override
public void run() {
tv.setText("X-axis : " + mx + "\n"
+ "Y-axis : " + my + "\n"
+ "Z-axis : " + mz + "\n");
h.postDelayed(this, 500);
}
@Override
protected void onResume() {
super.onResume();
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
List<Sensor> sensors =
sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
if (0 < sensors.size()) {
sm.registerListener(this, sensors.get(0),
SensorManager.SENSOR_DELAY_NORMAL);
}
}
@Override
protected void onPause() {
super.onPause();
sm.unregisterListener(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
h.removeCallbacks(this);
}
@Override
public void onSensorChanged(SensorEvent event) {
mx = event.values[0];
my = event.values[1];
mz = event.values[2];
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
アプリの実行結果
Android 実機の上部が北を向くように水平な机の上に置いた時の実行結果は以下のようになりました。Y 軸の+方向に掛かる磁力を取得できている様子が確認できます。
0 件のコメント:
コメントを投稿