久しぶりに軽くAndroidでSensorManager
久しぶりのBlogを更新。今まで何をやっていたかというと、業務が開発と離れていたためサボっていました...。ということで、久しぶりに地道に頑張ってBlog更新して行こうかと思います。ということで、今回は軽めにSensorManagerから加速度センサーを取得し、各軸の加速度をTextViewに表示してみたいと思います。
実装の要点を下記にまとめます
1. SensorMangerを取得
SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
2. 加速度センサーを取得
Sensor ac = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
3. 加速度センサーにSensorEventListerを登録
manager.registerListener(this, ac, SensorManager.SENSOR_DELAY_GAME)
4. SensorEventListener#onSensorChanged()内で加速度を取得
@Override public void onSensorChanged(SensorEvent event) { mBuilder.setLength(0); mBuilder.append("x: "); //values[0]にはx軸の加速度 mBuilder.append(event.values[0]); mBuilder.append(", y: "); //values[1]にはy軸の加速度 mBuilder.append(event.values[1]); mBuilder.append(", z: "); //values[2]にはz軸の加速度 mBuilder.append(event.values[2]); mTextView.setText(mBuilder.toString()); }
では実装です
SensorEventListenerを実装したActivity
package com.android.example; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class AccelerometerTest extends Activity implements SensorEventListener { private static final String TAG = AccelerometerTest.class.getSimpleName(); private TextView mTextView; private StringBuilder mBuilder = new StringBuilder(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView= new TextView(this); setContentView(mTextView); //SensorMangerを取得 SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //SensorManagerオブジェクトを使ってDeviceに加速度センサーがあるか確認 if(manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size() == 0){ mTextView.setText("No accelerometer"); }else{ //SensorManagerオブジェクトを使ってDeviceの加速度センサーを取得 Sensor ac = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0); //SensorManagerオブジェクトを使ってSensorListnerを加速度センサーに登録 if(!manager.registerListener(this, ac, SensorManager.SENSOR_DELAY_GAME)){ mTextView.setText("Couldn't register a listener"); } } } //センサーの精度が変わった時にコールバックされる //無視してOK @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { //Do nothing } //センサーの状態が変化した時にコールバックされる @Override public void onSensorChanged(SensorEvent event) { mBuilder.setLength(0); mBuilder.append("x: "); //values[0]にはx軸の加速度 mBuilder.append(event.values[0]); mBuilder.append(", y: "); //values[1]にはy軸の加速度 mBuilder.append(event.values[1]); mBuilder.append(", z: "); //values[2]にはz軸の加速度 mBuilder.append(event.values[2]); mTextView.setText(mBuilder.toString()); } }
と、こんな感じです。
HashTag #Java, #Android, #SensorManager, #SensorEventListener, #Sensor