本來想做一個方向感測器的範例,後來發現 Android有一些改版的變化,

所以先嘗試加速度感測器得程式,

加速度感測器主要有X, Y, Z數值,

X表示左右移動的加速度

Y表示前后移動的加速度

Z表示垂直方向的加速度

使用TextView來顯示X, Y, Z的數值,

製作完成的App畫面如下:

037b7275-9fa6-42d7-a5c7-6d5288241bad.jpg

Android code如下:

package com.example.orient_sensor;

import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;

public class Orient_Activity extends Activity implements SensorEventListener{
    //設置Log標籤
    private static final String TAG = "sensor";
    private TextView aSensor_X;
    private TextView aSensor_Y;
    private TextView aSensor_Z;
    
    private SensorManager mSensorManager;
    private Sensor aSensor;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_orient_);
        aSensor_X = (TextView) this.findViewById(R.id.as_X);
        aSensor_Y = (TextView) this.findViewById(R.id.as_Y);
        aSensor_Z = (TextView) this.findViewById(R.id.as_Z);
        //創建一個SensorManager來獲取系統的感測器服務  
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        //感應器註冊
        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);  
    }
    @Override
    protected void onResume() {
        super.onResume();        
        List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
        //如果有取到該手機的加速度感測器,就註冊他。
        if (sensors.size()>0) {
            //感應器註冊
            mSensorManager.registerListener(this, aSensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
    @Override
    protected void onPause() {
     super.onPause();
     //解除感應器註冊
     mSensorManager.unregisterListener(this);
    }
 
    @Override
    //onSensorChanged 當數據變化時被觸發調用
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        float[] values = event.values;
        aSensor_X.setText("X:" + String.valueOf(values[0]));
        aSensor_Y.setText("Y:" + String.valueOf(values[1]));
        aSensor_Z.setText("Z:" + String.valueOf(values[2]));
        Log.i(TAG,"\n heading "+values[0]);  
        Log.i(TAG,"\n pitch "+values[1]);  
        Log.i(TAG,"\n roll "+values[2]);
    }
    
    @Override
    //onAccuracyChanged 當數據的精確度發生變化時被調用
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub
        
    }

參考資料:

1. http://blog.csdn.net/octobershiner/article/details/6639040

2. http://wangshifuola.blogspot.tw/2011/06/androidsensorsensortypeorientation.html

arrow
arrow

    fishark 發表在 痞客邦 留言(0) 人氣()