Android SDK supports various sensors like acceleration and magnetism. In this time, we described the program that measures the inclination like orientation, pitch and roll in device.
センサの計測手順
センサ計測は大きく次の3つの手順を踏みます.
1.SensorManagerインスタンスの取得
SensorManagerはデバイスのセンサにアクセスするためのクラスです.引数にSENSOR_SERVICEを指定したgetSystemServiceメソッドを呼び出すことでSensorManagerインスタンスが得られます.
2.リスナの登録
SensorManagerのregisterListenerメソッドを呼び出すことで,センサに対応したリスナを登録することができます.引数にSensorEventListener,Sensor,センサの受信頻度を指定します.
3.リスナの応答処理記述
SensorEventListenerにはonAccuracyChanged,onSensorChangedメソッドが定義されているので,これらを実装します.onAccuracyChangedはセンサの精度が変更される際に,onSensorChangedはセンサの値が変更される際に呼び出されるメソッドです.
傾きを計測するプログラム
プログラムではonResumeとonPauseでリスナの登録削除を行っています.onResume,onPauseはそれぞれ実行中,一時停止になるタイミングで呼び出されるメソッドです.
傾きを計測するには,Sensorインスタンスの取得のために定数Sensor.SENSOR_ORIENTATIONをsensorを指定します.このとき,onSensorChangedの引数SensorEventのインスタンスであるeventには次のような計測値が入ります.
event.values[0]:方位
event.values[1]:ピッチ
event.values[2]:ロール
これらの値をLogCatに表示するように書きだしています.
/LayoutTest/src/org/example/layout/Alfa.java
package org.example.layout; import java.util.List; 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.util.Log; public class Alfa extends Activity implements SensorEventListener{ private boolean registeredSensor = false; private SensorManager sensorManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alfa); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { super.onResume(); Listsensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION); if (sensors.size() > 0) { Sensor sensor = sensors.get(0); registeredSensor = sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST); } } @Override protected void onPause() { if (registeredSensor) { sensorManager.unregisterListener(this); registeredSensor = false; } super.onPause(); } public void onAccuracyChanged(Sensor arg0, int arg1) { } public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { Log.v("ORIENTATION", String.valueOf(event.values[0]) + ", " + String.valueOf(event.values[1]) + ", " + String.valueOf(event.values[2])); } } }
実行は実機がないので確認できていませんが,どうやらSensorSimulatorというシミュレータを使えば,エミュレータ上でも確認ができるようです.
参考URL
センサー(Sensor)を使用するには
0 件のコメント:
コメントを投稿