
加速度センサーの値を取得するサンプル#trySensor00


加速度センサーを使って各方向の加速度を取り出す(X,Y,Z)
せっかくなので取り出した値に色をつけてみちゃったり。
振動センサー的なモノだと勘違いしていたけど端末の傾きを表現するモノらしい。
端末が水平においてあるときはX=0だけど左に傾けると+になっていって真下を向くとまた0になる。
これで瞬間的な衝撃(例えば画面をとんとん叩いたときの振動)を取り出すのはちょっと難しそう。
●検索した事
TYPE_ACCELEROMETER Android 2.1
Android onSensorChanged TYPE_ACCELEROMETER
●開発環境
Eclipse IDE バージョン: 3.7 Indigo Service Release 2
ターゲットプラットフォーム: 2.1
API レベル: 7
package trial.sample.trysensor00; import android.app.Activity; import android.graphics.Color; 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.EditText; public class TrySensor00Activity extends Activity implements SensorEventListener, Runnable{ private SensorManager mSensorManager; // センサーマネージャー private Sensor mAccelerometer; // 加速度センサー private Handler mHander = new Handler(); // 定期的に表示を切り替える // エディットテキストのコントロール private EditText mEditTextX; private EditText mEditTextY; private EditText mEditTextZ; // 加速度センサーの値 private float mAcceX; private float mAcceY; private float mAcceZ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // センサーマネージャーを取り出す this.mSensorManager = (SensorManager)this.getSystemService(SENSOR_SERVICE); // 加速度センサーを取り出す this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); // EditTextを取り出す this.mEditTextX = (EditText)this.findViewById(R.id.editText_X); this.mEditTextY = (EditText)this.findViewById(R.id.editText_Y); this.mEditTextZ = (EditText)this.findViewById(R.id.editText_Z); } // //////////////////////////////////////////////////////////// // アプリケーション再開時 @Override protected void onResume() { // センサーリスナーを登録する this.mSensorManager.registerListener( this, this.mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); // 表示を切り替えるためのハンドラー this.mHander.postDelayed(this, 50); super.onResume(); } // //////////////////////////////////////////////////////////// // Activityがバックグラウンドに来たときかな? @Override protected void onPause() { // リスナーを外す this.mSensorManager.unregisterListener(this); // 表示を切り替えるためのハンドラー this.mHander.removeCallbacks(this); super.onPause(); } // //////////////////////////////////////////////////////////// // アプリが破棄された @Override protected void onDestroy() { // TODO 自動生成されたメソッド・スタブ super.onDestroy(); } // //////////////////////////////////////////////////////////// // 精度が変更された public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO 自動生成されたメソッド・スタブ } // //////////////////////////////////////////////////////////// // センサーの値に変更があった public void onSensorChanged(SensorEvent event) { // 加速度センサだった時 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // 各軸方向の値を取り出す this.mAcceX = event.values[0]; this.mAcceY = event.values[1]; this.mAcceZ = event.values[2]; } } // //////////////////////////////////////////////////////////// // センサーの値から色を作る(0→10→0→-10→0みたいな値の変化をする) private int sensorValueToColor(float value) { value = Math.abs(value); return (int)((value / 10.0f) * 255); // return 255 - (int)((value / 10.0f) * 255); } // //////////////////////////////////////////////////////////// // 定期的に実行 public void run() { // EditTextに表示する this.mEditTextX.setText(String.format("%1.8f", this.mAcceX)); this.mEditTextX.setBackgroundColor(Color.rgb(this.sensorValueToColor(this.mAcceX), 0, 0)); this.mEditTextY.setText(String.format("%1.8f", this.mAcceY)); this.mEditTextY.setBackgroundColor(Color.rgb(0, this.sensorValueToColor(this.mAcceY), 0)); this.mEditTextZ.setText(String.format("%1.8f", this.mAcceZ)); this.mEditTextZ.setBackgroundColor(Color.rgb(0, 0, this.sensorValueToColor(this.mAcceZ))); this.mHander.postDelayed(this, 50); } }
一定時間で勝手に消えるダイアログサンプル#tryCustomDialog01 タッチパネルを触った強さを取るサンプル#tryTouch00
sensorの使い方がよくわからなかったので参考になります。
コメントありがとうございます。
これからもお気軽にお使いください。