PowerManager与WakeLock

2019-07-13 23:52发布

参考 PowerManager简介 菜鸟教程:10.6 PowerManager(电源服务) android PowerManager分析(非常详细) PowerManager(电源服务),用于 管理CPU运行,键盘或屏幕亮起来; PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE); boolean isScreenOn = powerManager.isScreenOn(); @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyTag"); wakeLock.acquire();//获取锁 //在这个过程,屏幕会保持光亮! wakeLock.release();//释放锁

flag

下面的flag(影响系统电源)都是互斥,你只有使用其中的一个 Flag Value CPU Screen Keyboard 电源键影响 应用情景 PARTIAL_WAKE_LOCK On* Off(息屏) Off 不受 听音乐,后台下载等 SCREEN_DIM_WAKE_LOCK On Dim(暗淡) Off 受 即将进入灭屏休眠状态时 SCREEN_BRIGHT_WAKE_LOCK On Bright(明亮) Off 受 看电子书,看视频,操作屏幕没有操作到键盘等 FULL_WAKE_LOCK On Bright(明亮) Bright 受 来电话,闹钟触发等
PARTIAL_WAKE_LOCK: 保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ps:如果你使用的是局部唤醒锁的话(使用PARTIAL_WAKE_LOCK标志),CPU会继续运行,
将忽略任何的计时器,甚至按下电源按钮。其他的唤醒锁话,CPU也会继续运转,
但是使用者仍 然可以按电源按钮让设备睡眠。 另外,你可以使用两个以上的标记,但是他只影响屏幕的行为。
和 PARTIAL_WAKE_LOCK 同时使用的话,没有任何影响。 在上面的flag上还再加上如下的2个flag(屏幕解锁参数),但是他们和PARTIAL_WAKE_LOCK.组合没任何意义 flag 说明 备注 ACQUIRE_CAUSES_WAKEUP = 0x10000000 说明:正常情况下,获取wakelock是不会唤醒设备的,加上该标志之后,acquire wakelock也会唤醒设备,该标志常用于闹钟触发,蓝牙链接提醒等场景。 不能和PARTIAL_WAKE_LOCK 一起用 ON_AFTER_RELEASE = 0x20000000 说明:和用户体验有关,当wakelock释放后如果没有该标志,屏幕会立即黑屏,如果有该标志,屏幕会亮一小会然后在黑屏。 不能和PARTIAL_WAKE_LOCK 一起用
ACQUIRE_CAUSES_WAKEUP
默认情况下wake locks并不是马上开启CPU或Screen或Keyboard的illumination
(对于Screen是Dim或Bright,Keyboard是Bright. wake locks只是在被开启后(比如用户的活动),
让设备延续(保存)你设定开启的状态.
但是如果加上ACQUIRE_CAUSES_WAKEUP就可以让Screen或Keyboar的illumination没开启的情况,
马上开启它们。 典型的应用就是在收到一个重要的notifications时,需要马上点亮屏幕。
ON_AFTER_RELEASE
如果有该flag, 那么在WakeLock被释放的时候,user activity计时器将被重设,
这样illumination将持续一段更长的时间.
This can be used to reduce flicker if you are cycling between wake lock conditions.

需要的权限

要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限: 你可能还需要: 另外WakeLock的设置是Activity级别的,而不是针对整个Application应用的!

WakeLock唤醒锁

acquire()和release()方法来申请和获取锁,acquire申请锁有两种: acquire():申请wakelock永久锁(默认),需要手动release acquire(long timeout) :申请wakelock超时锁,timeout为设置的超时时间,超时自动release掉该wakelock。