▼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);
    }
}


−戻る−