Android 正确判断屏幕解锁事件
之前在项目里需要监听屏幕解锁事件,所以做了点调研,其实很简单 就是动态监听屏幕解锁广播:”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 正确判断屏幕解锁事件相关推荐
- Android 监听屏幕解锁事件
在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...
- Android监听屏幕解锁和判断屏幕状态
开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听 ...
- android学习之屏幕解锁
先说下思路 1.一般android手机屏幕上解锁都为3*3(正方形): 考虑手机屏幕方向,绘制时需要考虑横屏问题,可以自定义控件.屏幕锁位置在屏幕中央, (1) int width=getWidth( ...
- Android监听手机屏幕解锁和判断屏幕状态
开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在AndroidManifest配置里面注册action为 android.intent.action.USER_PRES ...
- 监听屏幕解锁和判断屏幕状态
开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为android.intent.action.USER_PRESENT的广播,则可以监听解锁事件 ...
- android app 唤醒屏幕
1,添加权限: <uses-permission android:name="android.permission.WAKE_LOCK" /> 2,代码如下: // 唤 ...
- Android判断屏幕状态与屏幕解锁和锁定
主动判断屏幕是否亮着: public boolean isScreenOn(Context context) { PowerManager pm = (PowerManager) conte ...
- android手机解锁成功后的广播,android屏幕加解锁事件广播的监听
想在程序中监听屏幕SCREEN_ON和SCREEN_OFF这两个action,实现屏幕锁定状态的监听,从而实现自己的相应功能.比较奇怪的是这两个action只能通过代码的形式注册才能被监听到,在And ...
- 计算Android屏幕解锁组合数
计算Android屏幕解锁组合数 晚饭时和同事聊到安卓屏幕解锁时会有多少种解锁方案,觉得很有趣,吃完饭开始想办法解题,花了大概2个小时解决.思路如下: 使用索引值0-9表示从左到右.从上到下的9个点, ...
最新文章
- 为什么阿里程序猿纷纷在内网晒代码?
- 红旗6SP1版不克不及显示NTFS内的中文文件
- 011 数据结构逆向—二叉树
- coreboot学习10:coreboot第一阶段学习小结
- python爬虫requests库_python爬虫使用Requests库 - pytorch中文网
- [转] 做一个让人欣赏的女子
- 需要一个红警2的易语言源码
- 如何控制cpu资源使用?
- 应用排行榜第一名脸萌仅仅是刹那的烟火
- redis基本命令和help使用
- HTML用css把英文字母改大,CSS转换英文大小写text-transform属性
- 树莓派安装 Docker CE
- balsamiq原型工具
- C语言——函数的一些基本概念
- 以太坊源码分析:fetcher模块和区块传播
- 时间序列平稳性分析和白噪声检验
- VSCode打开.c文件出现中文乱码解决办法
- html显示宇宙星星,回复评论
- 算一个数的阶乘(例如100的阶乘)
- 使用大气校正法对landsat-8tirs地表温度进行反演
热门文章
- root后手机开发者模式
- ISBN-10和ISBN-13有什么区别?
- ibm imm挂载iso文件_【CentOS】IBM X3650M4 IMM远程管理【转载】
- JS的Math对象,求数组的最大值max(),最小值min(),随机数 random()
- 表面处理及喷涂03——电镀
- js对url进行编码解码(三种方式)
- vue框架根据antd封装的走马灯组件
- 基于haar特征的adaboost算法_SuperGlue一种基于图卷积神经网络的特征匹配算法
- 报告摘读-中国手机屏幕入口价值研究报告艾瑞咨询,2015
- 竞赛专题 | 数据预处理-如何处理数据中的坑?