本篇实现手机的摇一摇功能,并在检测到手机摇动后震动1.5秒。
#### 权限
震动权限
~~~
<uses-permission android:name="android.permission.VIBRATE" />
~~~
#### 变量
sensorManager是感应管理器;shakeEnable用来表示是否可以震动,避免在震动过程中继续震动。
~~~
private SensorManager sensorManager;
private boolean shakeEnable = true;
~~~
#### 监听
震动使用Vibrator。
使用的加速度传感器实现的摇一摇功能,阀值设置的加速度是25以上的时候为摇晃了手机,当然这个数值可以修改。
~~~
/**
* 当传感器的精度发生变化时就会调用onAccuracyChanged()方法
* 当传感器监测到的数值发生变化时就会调用onSensorChanged()方法
*/
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if(shakeEnable) {
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue > 25 || yValue > 25 || zValue > 25) {
shakeEnable = false;
//震动1.5s
Vibrator vib = (Vibrator) MainActivity.this.getSystemService(Service.VIBRATOR_SERVICE);
vib.vibrate(1500);
//2秒后可以继续摇一摇
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
shakeEnable = true;;
}
}, 2000);
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
~~~
#### 定义并添加监听
~~~
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);
}
}
~~~