之前在项目里需要监听屏幕解锁事件,所以做了点调研,其实很简单 就是动态监听屏幕解锁广播:”Intent.ACTION_USER_PRESENT”,当手机设置了锁屏,这个方法是没问题的。
但是这里有一个坑,那就是:如果系统没有设置锁屏,对于我们来说,此时亮屏相当于解锁屏幕,当android 版本号 <= 19时,系统只会发出广播”Intent.ACTION_SCREEN_ON”;而在之后的版本,系统会先后发出广播:”Intent.ACTION_USER_PRESENT” ,”Intent.ACTION_SCREEN_ON”。总结下情况是这样的:
android 版本号 | 屏幕解锁时机 | 是否设置锁屏 |
---|---|---|
<= 19 | Intent.ACTION_USER_PRESENT | yes |
>19 | Intent.ACTION_USER_PRESENT | yes |
<= 19 | Intent.ACTION_SCREEN_ON | no |
>19 | Intent.ACTION_USER_PRESENT | no |
也就是说 ,只要我们能监听到广播”Intent.ACTION_USER_PRESENT”,那么肯定可以确认屏幕已经解锁了。当监听到广播”Intent.ACTION_SCREEN_ON”,>19 的版本可以忽略这个广播,