使用registerActivityLifecycleCallbacks实现整个app所有activity生命周期的监听和处理

监听手机的摇一摇事件,需要注册系统的加速度传感器,一般是在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) {

        }
    };

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值