本來想做一個方向感測器的範例,後來發現 Android有一些改版的變化,
所以先嘗試加速度感測器得程式,
加速度感測器主要有X, Y, Z數值,
X表示左右移動的加速度
Y表示前后移動的加速度
Z表示垂直方向的加速度
使用TextView來顯示X, Y, Z的數值,
製作完成的App畫面如下:
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
留言列表