一、加速度傳感器的用法
1. 獲取 SensorManager 實例喻杈。
SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2. 通過 getDefaultSensor() 得到某種傳感器的實例盐须。
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
3. 借助 SensorEventListener 對傳感器輸出的信號進行監(jiān)聽宰闰。
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
}
};
- 當傳感器的精度發(fā)生變化時就會調(diào)用 onAccuracyChanged() 方法肩狂。
- 當傳感器監(jiān)測到的數(shù)值發(fā)生變化時就會調(diào)用 **onSensorChanged() **方法。
**onSensorChanged() **方法中傳入了一個 SensorEvent 參數(shù)钉汗,這個參數(shù)里又包含了一個 values 數(shù)組羹令,所有傳感器輸出的信息都是存放在這里的。
- 此時的** values** 數(shù)組中會有三個值损痰,分別代表手機在 X 軸福侈、Y 軸和** Z 軸**方向上的加速度信息。
4. 調(diào)用 SensorManager 的 registerListener() 方法來注冊SensorEventListener 使其生效卢未。
senserManager.registerListener(listener, senser, SensorManager.SENSOR_DELAY_NORMAL);
- 第一個參數(shù):SensorEventListener 的實例肪凛。
- 第二個參數(shù):Sensor 的實例。
- 第三個參數(shù):傳感器輸出信息的更新速率辽社。以下更新速率是依次遞增伟墙。
- SENSOR_DELAY_UI
- SENSOR_DELAY_NORMAL
- **SENSOR_DELAY_GAME **
- **SENSOR_DELAY_FASTEST **
5. 最后調(diào)用 unregisterListener() 方法將使用的資源釋放掉。
sensorManager.unregisterListener(listener);
二滴铅、模仿微信搖一搖
public class MainActivity extends Activity {
private SensorManager sensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService (Context.SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager != null) {
sensorManager.unregisterListener(listener);
}
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 加速度可能會是負值戳葵,所以要取它們的絕對值
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue > 15 || yValue > 15 || zValue > 15) {
// 認為用戶搖動了手機,觸發(fā)搖一搖邏輯
Toast.makeText(MainActivity.this, "搖一搖", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者