于今腐草无萤火,终古垂杨有暮鸦。这篇文章主要讲述Android 监听屏幕锁屏&
用户解锁相关的知识,希望能为你提供帮助。
在做视频播放器的时候,遇到一个问题,在用户播放视频然后锁屏之后,视频播放器仍然在继续播放,遇到类似手机系统状态改变的问题的时候,首先想到了广播,下面做个总结:
public class ScreenListener { private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenStateListener; public ScreenListener(Context context) { mContext = context; mScreenReceiver = new ScreenBroadcastReceiver(); }/** * screen状态广播接收者 */ private class ScreenBroadcastReceiver extends BroadcastReceiver { private String action = null; @Override public void onReceive(Context context, Intent intent) { action = intent.getAction(); if (Intent.ACTION_SCREEN_ON.equals(action)) { // 开屏 mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 锁屏 mScreenStateListener.onScreenOff(); } else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解锁 mScreenStateListener.onUserPresent(); } } }/** * 开始监听screen状态 * * @param listener */ public void begin(ScreenStateListener listener) { mScreenStateListener = listener; registerListener(); getScreenState(); }/** * 获取screen状态 */ private void getScreenState() { PowerManager manager = (PowerManager) mContext .getSystemService(Context.POWER_SERVICE); if (manager.isScreenOn()) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } } }/** * 停止screen状态监听 */ public void unregisterListener() { mContext.unregisterReceiver(mScreenReceiver); }/** * 启动screen状态广播接收器 */ private void registerListener() { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_USER_PRESENT); mContext.registerReceiver(mScreenReceiver, filter); }public interface ScreenStateListener {// 返回给调用者屏幕状态信息 public void onScreenOn(); public void onScreenOff(); public void onUserPresent(); } }
在上面的代码中,用到了动态注册广播,在需要监听屏幕状态的activity中,当不需要监听的时候,如activity finish的时候,使用unregisterListener解除广播监听; 下面是在Activity中调用;
ScreenListener l = new ScreenListener(this); l.begin(new ScreenStateListener() {@Override public void onUserPresent() { Log.e("onUserPresent", "onUserPresent"); }@Override public void onScreenOn() { Log.e("onScreenOn", "onScreenOn"); }@Override public void onScreenOff() { Log.e("onScreenOff", "onScreenOff"); } });
通过以上步骤即实现了对屏幕状态的监听.
【Android 监听屏幕锁屏& 用户解锁】
推荐阅读
- Tomcat 访问Manager APP报403错误
- Android 计时器及TimerTask is scheduled already的Bug处理
- Dapper:安装Dapper时报错
- 各种安卓模拟器连接Adb
- interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)
- [Android开发]合集(随时更新)
- Android 获取 debug SHA1和发行版SHA1
- Keep i2020-12-31 459次浏览原文mybatis通用mapper动态查询表名
- idea报错 Error creating bean with name 'requestMappingHandlerMapping' defined in class path re