public class SampleApp extends Activityここでは、SampleApp自身にSensorEventListenerをimplementsしておきました。従って、このクラスにイベント処理用のメソッドを用意すればよいわけですね。
implements SensorEventListener {……}
manager = (SensorManager)getSystemService(SENSOR_SERVICE);まずはSensorManagerを取得します。これはActivity内の「getSystemService」メソッドを使います。これはシステムのサービスを取得するためのもので、引数に「SENSOR_SERVICE」というクラスフィールドを指定します。これが、センサーのサービスを示す値です。これで取得したインスタンスをSensorManagerにキャストします。
List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_ACCELEROMETER);SensorManagerから、加速度センサーのSensorを取得します。このとき注意すべきは、「センサーは1つとは限らないない」という点です。
manager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_FASTEST);ここでは、返されたListから、最初のSensorを取得し、これにSensorManagerの「registerListener」でイベントリスナーの登録をしています。
public void onAccuracyChanged(Sensor arg0, int arg1) {}SensorEventListenerには2つのメソッドが必要です。それが、onAccuracyChangedとonSensorChangedです。onAccuracyChangedはセンサーの精度が変更された時のイベント処理です。onSensorChangedはセンサーの値が変更された時のイベント処理です。ここでは、onSensorChangedメソッドのみ使っています。
public void onSensorChanged(SensorEvent event) {……}
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {……}onSensorChangedメソッドでは、まずイベントが発生したのが加速度センサーかどうかをチェックしています。メソッドの引数にSensorEventというセンサーのイベント情報を管理するオブジェクトが渡されます。このsensorフィールドの「getType」メソッドにより、センサーの種類がわかります。
result = "Gx: " + String.valueOf(event.values[0]) + "\n";センサーの値は、eventインスタンスの「values」に配列としてまとめられています。加速度センサーでは、X、Y、Zの各軸方向の値がまとめられていますので、それぞれ取り出してテキストにまとめています。
result += "Gy: " + String.valueOf(event.values[1]) + "\n";
result += "Gz: " + String.valueOf(event.values[2]);
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
package jp.tuyano; import java.util.List; import android.app.Activity; import android.hardware.*; import android.os.Bundle; import android.widget.TextView; public class SampleApp extends Activity implements SensorEventListener { private SensorManager manager; private TextView text1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text1 = (TextView)this.findViewById(R.id.text); manager = (SensorManager)getSystemService(SENSOR_SERVICE); List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_ACCELEROMETER); if (sensors.size() > 0) { Sensor sensor = sensors.get(0); manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST); } } @Override public void onAccuracyChanged(Sensor arg0, int arg1) {} @Override public void onSensorChanged(SensorEvent event) { String result = ""; if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { result = "Gx: " + String.valueOf(event.values[0]) + "\n"; result += "Gy: " + String.valueOf(event.values[1]) + "\n"; result += "Gz: " + String.valueOf(event.values[2]); } text1.setText(result); } }
<< 前へ | 次へ >> |