之前在项目里需要监听屏幕解锁事件,所以做了点调研,其实很简单 就是动态监听屏幕解锁广播:”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 的版本可以忽略这个广播,而 <= 19版本,此时还要判断下屏幕是否真正解锁了,判断方法如下:

KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean isLock = keyguardManager != null && keyguardManager.inKeyguardRestrictedInputMode();

屏幕处于锁屏状态时,isLock =为 true,屏幕解锁后 isLock 为false。最终代码如下:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_PRESENT);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if(TextUtils.isEmpty(action)){return;}if(action.equals(Intent.ACTION_USER_PRESENT)){//do somthingreturn;}if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){if(action.equals(Intent.ACTION_SCREEN_ON)){KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);boolean isLock = keyguardManager != null && keyguardManager.inKeyguardRestrictedInputMode();if(!isLock){//do somthing}}}}},filter);

Android 正确判断屏幕解锁事件相关推荐

  1. Android 监听屏幕解锁事件

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  2. Android监听屏幕解锁和判断屏幕状态

     开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听 ...

  3. android学习之屏幕解锁

    先说下思路 1.一般android手机屏幕上解锁都为3*3(正方形): 考虑手机屏幕方向,绘制时需要考虑横屏问题,可以自定义控件.屏幕锁位置在屏幕中央, (1) int width=getWidth( ...

  4. Android监听手机屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在AndroidManifest配置里面注册action为 android.intent.action.USER_PRES ...

  5. 监听屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为android.intent.action.USER_PRESENT的广播,则可以监听解锁事件 ...

  6. android app 唤醒屏幕

    1,添加权限: <uses-permission android:name="android.permission.WAKE_LOCK" /> 2,代码如下: // 唤 ...

  7. Android判断屏幕状态与屏幕解锁和锁定

    主动判断屏幕是否亮着: public boolean isScreenOn(Context context) {      PowerManager pm = (PowerManager) conte ...

  8. android手机解锁成功后的广播,android屏幕加解锁事件广播的监听

    想在程序中监听屏幕SCREEN_ON和SCREEN_OFF这两个action,实现屏幕锁定状态的监听,从而实现自己的相应功能.比较奇怪的是这两个action只能通过代码的形式注册才能被监听到,在And ...

  9. 计算Android屏幕解锁组合数

    计算Android屏幕解锁组合数 晚饭时和同事聊到安卓屏幕解锁时会有多少种解锁方案,觉得很有趣,吃完饭开始想办法解题,花了大概2个小时解决.思路如下: 使用索引值0-9表示从左到右.从上到下的9个点, ...

最新文章

  1. 为什么阿里程序猿纷纷在内网晒代码?
  2. 红旗6SP1版不克不及显示NTFS内的中文文件
  3. 011 数据结构逆向—二叉树
  4. coreboot学习10:coreboot第一阶段学习小结
  5. python爬虫requests库_python爬虫使用Requests库 - pytorch中文网
  6. [转] 做一个让人欣赏的女子
  7. 需要一个红警2的易语言源码
  8. 如何控制cpu资源使用?
  9. 应用排行榜第一名脸萌仅仅是刹那的烟火
  10. redis基本命令和help使用
  11. HTML用css把英文字母改大,CSS转换英文大小写text-transform属性
  12. 树莓派安装 Docker CE
  13. balsamiq原型工具
  14. C语言——函数的一些基本概念
  15. 以太坊源码分析:fetcher模块和区块传播
  16. 时间序列平稳性分析和白噪声检验
  17. VSCode打开.c文件出现中文乱码解决办法
  18. html显示宇宙星星,回复评论
  19. 算一个数的阶乘(例如100的阶乘)
  20. 使用大气校正法对landsat-8tirs地表温度进行反演

热门文章

  1. root后手机开发者模式
  2. ISBN-10和ISBN-13有什么区别?
  3. ibm imm挂载iso文件_【CentOS】IBM X3650M4 IMM远程管理【转载】
  4. JS的Math对象,求数组的最大值max(),最小值min(),随机数 random()
  5. 表面处理及喷涂03——电镀
  6. js对url进行编码解码(三种方式)
  7. vue框架根据antd封装的走马灯组件
  8. 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法
  9. 报告摘读-中国手机屏幕入口价值研究报告艾瑞咨询,2015
  10. 竞赛专题 | 数据预处理-如何处理数据中的坑?