Android锁屏与解锁广播状态监听
2016-12-20 21:59
731 查看
Android锁屏与解锁广播监听
在Android开发中经常会碰到锁屏和解锁的需求,这里封装一个ScreenListener统一管理广播的注册和反注册,同时设置锁屏和解锁的回调监听。代码如下:
public class ScreenListener { private Context mContext; private ScreenBroadcastReceiver receiver; private ScreenStateListener mScreenStateListener; public ScreenListener(Context context) { mContext = context; receiver = new ScreenBroadcastReceiver(); } public void register(ScreenStateListener screenStateListener) { if (screenStateListener != null) { mScreenStateListener = screenStateListener; } if (receiver != null) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_USER_PRESENT); mContext.registerReceiver(receiver, filter); } } public void unregister() { if (receiver != null) { mContext.unregisterReceiver(receiver); } } private class ScreenBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_ON.equals(action)) { if (mScreenStateListener != null) { Log.e("zhang", "ScreenBroadcastReceiver --> ACTION_SCREEN_ON"); mScreenStateListener.onScreenOn(); } } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { if (mScreenStateListener != null) { Log.e("zhang", "ScreenBroadcastReceiver --> ACTION_SCREEN_OFF"); mScreenStateListener.onScreenOff(); } } else if (Intent.ACTION_USER_PRESENT.equals(action)) { if (mScreenStateListener != null) { Log.e("zhang", "ScreenBroadcastReceiver --> ACTION_USER_PRESENT"); mScreenStateListener.onUserPresent(); } } } } } public interface ScreenStateListener { void onScreenOn(); void onScreenOff(); void onUserPresent(); } }
如果有需要,可以采用单例的写法
MainActivity中的调用
public class MainActivity extends AppCompatActivity { private ScreenListener listener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listener = new ScreenListener(this); listener.register(new ScreenListener.ScreenStateListener() { @Override public void onScreenOn() { Log.e("zhang", "MainActivity --> onScreenOn--> "); } @Override public void onScreenOff() { Log.e("zhang", "MainActivity --> onScreenOff--> "); } @Override public void onUserPresent() { Log.e("zhang", "MainActivity --> onUserPresent--> "); } }); } @Override protected void onDestroy() { if (listener != null) { listener.unregister(); } super.onDestroy(); } }
打印的log结果:
zhang: ScreenBroadcastReceiver --> ACTION_SCREEN_OFF zhang: MainActivity --> onScreenOff--> zhang: ScreenBroadcastReceiver --> ACTION_SCREEN_ON zhang: MainActivity --> onScreenOn--> zhang: ScreenBroadcastReceiver --> ACTION_USER_PRESENT zhang: MainActivity --> onUserPresent-->
相关文章推荐
- android 亮屏,暗屏,解锁,锁屏广播监听
- Android开发之adb && 破解开屏图案 && 代码判断当前是否处于锁屏状态并绕过解锁页面
- network: android 使用广播监听网络状态
- Android 监听屏幕锁屏,用户解锁
- Android锁屏或灭屏状态下,快速按两次音量下键实现抓拍功能(1.1Framework层使用广播形式实现)
- Android系统亮屏、锁屏、屏幕解锁事件(解决部分手机亮屏后未解锁即进入resume状态)
- android 飞行模式 注册广播后 三种状态监听
- android 使用广播监听网络状态
- Android系统亮屏、锁屏、屏幕解锁事件(解决部分手机亮屏后未解锁即进入resume状态)
- Android 监听屏幕锁屏,用户解锁
- Android锁屏或灭屏状态下,快速按两次音量下键实现抓拍功能(1.1Framework层使用广播形式实现)
- android 使用广播监听网络状态
- 监听Package的安装和卸载、电源的连接和断开、网络状态改变广播、解锁广播、屏幕变亮变按广播
- Android开发之使用广播监听网络状态变化
- network: android 使用广播监听网络状态
- android 使用广播监听网络状态
- android屏幕加解锁事件广播的监听
- android 使用广播监听网络状态
- android屏幕加解锁事件广播的监听
- android 飞行模式 注册广播后 三种状态监听