PowerManager与WakeLock

参考

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 ValueCPUScreenKeyboard电源键影响应用情景
PARTIAL_WAKE_LOCKOn*Off(息屏)Off不受听音乐,后台下载等
SCREEN_DIM_WAKE_LOCKOnDim(暗淡)Off即将进入灭屏休眠状态时
SCREEN_BRIGHT_WAKE_LOCKOnBright(明亮)Off看电子书,看视频,操作屏幕没有操作到键盘等
FULL_WAKE_LOCKOnBright(明亮)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中声明该应用有设置电源管理的权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

你可能还需要:

<uses-permission android:name="android.permission.DEVICE_POWER"/>

另外WakeLock的设置是Activity级别的,而不是针对整个Application应用的!

WakeLock唤醒锁

acquire()和release()方法来申请和获取锁,acquire申请锁有两种:

acquire():申请wakelock永久锁(默认),需要手动release

acquire(long timeout) :申请wakelock超时锁,timeout为设置的超时时间,超时自动release掉该wakelock。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值