备注:
1.【项目的apk是跑在自己Android6.0主板
设备上,上层是拥有Root权限
的】
2.【本文中提到息屏
是指在BroadcastReceiver
中接收到ACTION_SCREEN_ON
的操作;
亮屏
是接收到Intent.ACTION_SCREEN_OFF
操作】;
业务需求
- 公司的设备是一个带显示屏
Android(6.0 Root)
板的智能终端,有人体感应头,现在需要在apk上层做逻辑是:感应到人就点亮屏(这个easy),默认2分钟后如果没感应到人就息屏- 先说说我的最终
息屏
解决方式是利用Runtime
调用Linux-shell
发送ADB命令"input keyevent 223"
模拟电源按键息屏;【项目的apk是跑在自己Android6.0主板设备上,拥有Root权限】
开工
-
先想到是直接用
PowerManager.WakeLock
的acquire()和release()配合一下就搞定了(当初就是这么天真),结果是点屏幕是没问题的,但是就是不能息屏; -
本人是菜鸡直接就是百度了,结果网上就是一波
PowerManager应用反射goToSleep(long time)
;
如获至宝,然而goToSleep需要Requires signature permission
系统签名【Android权限等级见下表】,还是很折腾的,自己搞不定继续百度希望有大佬贴出实现代码; -
在网上逛一圈发现关于
PowerManager息屏
基本上都是讲理论,没有发现贴出来代码的,有些贴出来的可能是低版本系统上编译的吧,在我的AS上buildToolsVersion:"26.0.1"编译不过 -
后来看到用
DevicePolicyManager
实现的就是代码量有点大,而且还要申请k系统管理权限
,有点烦,但是在网上copy了一个demo,在设备上run一下功能是Ok的,于是学习一下API就开始往工程里塞了; -
当然期间在网上看到各种
“奇葩的”
实现方式,例如:广播或者设置设置windows的flag等许多方式,总之在实践中全部都没有效果
;
Android权限等级protectio