当前位置: 首页 > news >正文

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。

http://www.lryc.cn/news/570878.html

相关文章:

  • AI编程:正在拉开新一轮“人与人”的差距
  • canvas的drawImage方法参数详解
  • 网站点击流分析
  • 菜鸟成长手册:八大品牌内存真伪巧识别
  • 三款简单的日光灯驱动电路图分享
  • R语言——RStudio下载R包时总是下载不成功?解决方案
  • FckEditor中文配置手册详细说明
  • 智能土木通 - 土木工程专业知识问答系统01:项目简介
  • 2014校园招聘_腾讯2014校园招聘
  • 前端—每天5道面试题(十)
  • 【C语言】函数递归(有相关的题目练习喔~)
  • 1688图片搜索API接口攻略
  • 谷歌地图离线包-尝试
  • jQuery 和 YUI (Yahoo User Interface) 各自的优缺点有哪些?具体的使用场景是怎样的?...
  • 基于51单片机的温度和液位监测系统(串口传输)
  • 网络监测软件有哪些
  • <c++基础(5)>整数溢出
  • WP7超越Androidi五大优势:硬件要求严格居首
  • Java类加载器与双亲委派模型深度解析
  • CSDN博客背景皮肤设置
  • 运用API创建多线程
  • 电位器是什么?
  • 如何使用configure脚本安装PBS
  • 博客园 - 程序员的网上家园
  • 【C语言编程指南】
  • VS2005打包时加入卸载功能
  • “编程中的FAT32格式“——了解文件系统中的FAT32及其应用
  • 如何免费快速搭建属于自己的个人博客(零基础)
  • ubuntu13.04/kylin安装chrome问题解决
  • QQ微信营销软件防封操作秘籍