2013-07-02
Android 中傳感器的種類
加速度,Sensor.TYPE_ACCELEROMETER
陀螺儀,Sensor.TYPE_GYROSCOPE
亮度,Sensor.TYPE_LIGHT
地磁,Sensor.TYPE_MAGNETIC_FIELD
方向,Sensor.TYPE_ORIENTATION
壓力,Sensor.TYPE_PRESSURE
近程,Sensor.TYPE_PROXIMITY
溫度,Sensor.TYPE_TEMPERATURE
Android 中傳感器的功能
SensorManager 是所有傳感器的一個綜合管理類,包括了傳感器的種類、采樣率、精准度等。
// 得到一個SensorManager對象
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// 得到傳感器列表
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
// 注冊傳感器
boolean result = mSensorManager.registerListener(this, sensors, SensorManager.SENSOR_DELAY_FASTEST);
// 卸載傳感器
mSensorManager.unregisterListener(this);
// SensorEventListener有兩個接口方法
// 在傳感器值更改時調用
onSensorChanged(SensorEvent event);
// SensorEvent 對象包括一組浮點數
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
// 在傳感器的精准度發生改變時調用
// 參數accuracy表示傳感器新的准確值
onAccuracyChanged(Sensor sensor, int accuracy);
示例:
public class SensorActivity extends Activity implements SensorEventListener {
private boolean mRegisteredSensor;
private SensorManager mSensorManager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mRegisteredSensor = false;
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
protected void onResume() {
super.onResume();
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if(sensors.size() > 0) {
mRegisteredSensor = mSensorManager.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_FASTEST);
}
}
protected void onPause() {
if(mRegisteredSensor){
mSensorManager.unregisterListener(this);
mRegisteredSensor = false;
}
super.onPause();
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
float x = event.values[SensorManager.DATA_X];
float y = event.values[SensorManager.DATA_Y];
float z = event.values[SensorManager.DATA_Z];
}
}
}
SensorManager 常用方法
getDefaultSensor, 得到默認的傳感器對象
getInclination, 得到地磁傳感器傾斜角的弧度數
getOrientation, 得到設備旋轉的方向
getSensorList, 得到指定傳感器的列表
