目录结构:
contents structure [+]
- 如何监听屏幕锁屏
- 如何实现手机屏幕在锁屏后继续运行
最近笔者在做一个功能,就是实现Android程序在锁屏后可以继续运行,笔者在网上查了一些资料,现在整理出来,希望能够对你有所帮助。
监听屏幕锁屏可以通过如下方式来实现,直接通过代码来判定,或通过监听器来实现
如何实现Android程序在手机锁屏后继续运行
可以通过PowerManager的isScreenOn方法,代码如下:
这里需要解释一下:
屏幕“亮”,表示有两种状态:a、未锁屏 b、目前正处于解锁状态 。这两种状态屏幕都是亮的;
屏幕“暗”,表示目前屏幕是黑的 。
通过KeyguardManager的inKeyguardRestrictedInputMode方法,也可以实现判断屏幕的锁屏状态
对flag进行一下说明,经过试验,总结为:
如果flag为true,表示有两种状态:a、屏幕是黑的 b、目前正处于锁屏状态 。
如果flag为false,表示目前未锁屏
当然也可以通过反射的方式来调用上面的两种方法:
当安卓系统锁屏或者屏幕亮起,或是屏幕解锁的时候,系统内部都会发送相应的广播,我们只需要对广播进行监听就可以了
注册广播的伪代码如下:
在上面我们知道了如何监听屏幕的状态,接下要实现如何在屏幕关闭后程序不停止运行。关于这个功能,笔者在网上搜索了一些资料,Android的WakeLock机制就是其中一种,使用Android的service也可以。但是经过笔者的测试发现效果都不太理想,对于Android版本的兼容性不强,笔者的Android4.4可以支持,但是Android6.0经过测试发现却不支持。
下面笔者介绍一种万能方法,在这里感谢知乎给我提出的意见(听说是QQ锁屏的黑科技呢)。
就是在屏幕锁屏的时候,跳转到另一个界面,该界面只有一个像素点。
代码如下:
MainActivity.java
MainActivity.java
SinglePixelActivity.java
SinglePixelActivity.java
AndroidManifest.xml中需要添加如下:
运行上面的程序,可以看到计时器在正常打印东西,说明程序并没有完全停止,还可以看到打印如下的日志:
从日志中可以看出,当锁屏后,这个SinglePixelActivity立即进入了OnStop状态,在Onstop的状态的页面是很有可能被系统回收的。因此可以再配合上WakeLock机制,若WakeLock不合适的话,那么可以尝试播放无声音乐。保持系统不回收该App的资源。
需要注意,当锁屏后再次打开的跳转逻辑处理也是一个问题,可以参考 Android实现监听返回键,主键(HOME),菜单键