android PowerManager goToSleep 等用法

这个API很多坑,搞得我头疼好几次才研究出如何使用


第一个坑

android.permission.DEVICE_POWER  

需要声明此权限,也就是只有系统级别应用才可以

普通应用即使你声明了也不起作用,所以 PowerManager 需要 android.permission.DEVICE_POWER 权限的接口你都无权调用!

包括 goToSleep() weakUp() userActivity()


public void goToSleep(long time)
public void goToSleep(long time, int reason, int flags)
public void wakeUp(long time)
public void userActivity(long when, int event, int flags)
函数原型在此,可以反射调用


第二个坑

好不容易搞定了系统应用,调用 goToSleep() 各种不起作用(goToSleep() 效果就相对于你按下电源键),他有一个参数 int time ,官方这样解释

Parameters  time :
The time when the request to go to sleep was issued, in the uptimeMillis() time base.
This timestamp is used to correctly order the go to sleep request with other power management functions. 
It should be set to the timestamp of the input event that caused the request to go to sleep.


按他的意思是 以 SystemClock.uptimeMillis() 时间为基础,按我的理解就是 SystemClock.uptimeMillis() + 1000 在1s后手机进入休眠结果他给我抛一个异常,说 time must not be in the future!  然后只传 SystemClock.uptimeMillis() 可以调用,立即锁屏, fuck 啊,你既然这样设计为何还要留这个参数作甚,在里面直接使用 SystemClock.uptimeMillis() 不就是么?


weakUp() 效果相对于再按电源键开启屏幕,不解锁,调用方法同 goToSleep()


如何拥有系统权限,


1、android:sharedUserId="android.uid.system"
2、使用系统签名
3、放在 /system/app/ 下


你可能感兴趣的:(Android开发笔记)