▼Androidメモ▼
加速度センサーの利用
加速度センサーを利用するプログラムを作成する。
ソースコード
SensorEx.java package net.npaka.sensorex; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.view.Window; import java.util.List; //加速度センサーの利用 public class SensorEx extends Activity implements SensorEventListener { private SensorManager sensorManager;//センサーマネージャ private SensorView sensorView; //センサービュー private Sensor accelerometer;//加速度せンサー private Sensor orientation; //回転せンサー //初期化 @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); sensorView=new SensorView(this); setContentView(sensorView); //センサーマネージャの取得 sensorManager=(SensorManager)getSystemService( Context.SENSOR_SERVICE); //センサーの取得 List<Sensor> list; list=sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER); if (list.size()>0) accelerometer=list.get(0); list=sensorManager.getSensorList(Sensor.TYPE_ORIENTATION); if (list.size()>0) orientation=list.get(0); } //アプリの開始 @Override protected void onResume() { //アプリの開始 super.onResume(); //センサーの処理の開始 if (accelerometer!=null) { sensorManager.registerListener(this, accelerometer,SensorManager.SENSOR_DELAY_FASTEST); } if (orientation!=null) { sensorManager.registerListener(this, orientation,SensorManager.SENSOR_DELAY_FASTEST); } } //アプリの停止 @Override protected void onStop() { //センサーの処理の停止 sensorManager.unregisterListener(this); //アプリの停止 super.onStop(); } //センサーリスナーの処理 public void onSensorChanged(SensorEvent event) { //少数2桁切り捨て for (int i=0;i<3;i++) { int w=(int)(10*event.values[i]); event.values[i]=(float)(w/10.0f); } //加速度の取得 if (event.sensor==accelerometer) { sensorView.setAcceleration(event.values); } //方向の取得 if (event.sensor==orientation) { sensorView.setOrientation(event.values); } sensorView.invalidate(); } //精度変更イベントの処理 public void onAccuracyChanged(Sensor sensor,int accuracy) { } }
SensorView.java package net.npaka.sensorex; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; //加速度センサーの利用 public class SensorView extends View { private float[] acceleration=new float[3];//加速度 private float[] orientation =new float[3];//傾き //コンストラクタ public SensorView(Context context) { super(context); setBackgroundColor(Color.WHITE); } //加速度の指定 public void setAcceleration(float[] acceleration) { this.acceleration=acceleration; } //傾きの指定 public void setOrientation(float[] orientation) { this.orientation=orientation; } //描画 @Override protected void onDraw(Canvas canvas) { //ペイント Paint paint=new Paint(); paint.setAntiAlias(true); paint.setTextSize(16); //値の表示 canvas.drawText("SensorEx>",0,20,paint); canvas.drawText("X軸加速度:"+acceleration[0],0,20*2,paint); canvas.drawText("Y軸加速度:"+acceleration[1],0,20*3,paint); canvas.drawText("Z軸加速度:"+acceleration[2],0,20*4,paint); canvas.drawText("方位:" +orientation[0], 0,20*5,paint); canvas.drawText("ピッチ:" +orientation[1], 0,20*6,paint); canvas.drawText("ロール:" +orientation[2], 0,20*7,paint); } }
−戻る−