监听手机的摇一摇事件,需要注册系统的加速度传感器,一般是在onResume方法中register,在onpause方法中unregister,如果要重新注册监听,需要在注册生命周期监听的同时,重新注册加速度传感器才能有效。
public class ScreenShotManager {
private static final String TAG = "ScreenShotManager";
private static Application globalApplication;
private static Activity currentActivity;
private static Application.ActivityLifecycleCallbacks mActivityLifecycleCallbacks;
private static Vibrator vibrator;
private static SensorManager sensorManager;
public static void disableScreenShot()
{
Log.d("tingxiangregister","unregister");
if (sensorManager != null) {// 取消监听器
sensorManager.unregisterListener(sensorEventListener);
}
if(mActivityLifecycleCallbacks!=null) {
globalApplication.unregisterActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
}
}
public static void reEnableScreenShot(Activity thisActivity)
currentActivity=thisActivity;
if ((sensorManager != null)) {// 注册监听器
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
if(thisActivity.getComponentName().getClassName().equals(TMScreenShotActivity.SCREEN_SHOT_ACTIVITY_CLASS_NAME))
{
sensorManager.unregisterListener(sensorEventListener);
}
}
enableScreenShot();
}
public static void firstEnableScreenShot(Application application)
{
globalApplication =application;
enableScreenShot();
}
private static void enableScreenShot() {
Log.d("tingxiangregister","register");
if (mActivityLifecycleCallbacks == null) {
mActivityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
currentActivity=activity;
sensorManager = (SensorManager) activity.getSystemService(Activity.SENSOR_SERVICE);
vibrator = (Vibrator) activity.getSystemService(Activity.VIBRATOR_SERVICE);
}
@Override
public void onActivityStarted(Activity activity) {
currentActivity=activity;
}
@Override
public void onActivityResumed(Activity activity) {
Log.d("tingxiangActivityName", activity.getComponentName().getClassName());
currentActivity=activity;
if ((sensorManager != null)) {// 注册监听器
sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率
if(activity.getComponentName().getClassName().equals(TMScreenShotActivity.SCREEN_SHOT_ACTIVITY_CLASS_NAME))
{
sensorManager.unregisterListener(sensorEventListener);
}
}
}
@Override
public void onActivityPaused(Activity activity) {
if (sensorManager != null) {// 取消监听器
sensorManager.unregisterListener(sensorEventListener);
}
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityDestroyed(Activity activity) {}
};
}
globalApplication.registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
}
private static SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
float x = values[0]; // x轴方向的重力加速度,向右为正
float y = values[1]; // y轴方向的重力加速度,向前为正
float z = values[2]; // z轴方向的重力加速度,向上为正
if (Math.abs(x) > 15 || Math.abs(y) > 15 || Math.abs(z) > 19) {
vibrator.vibrate(200);
TMScreenShotDialog.showDialog(currentActivity);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
}