博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerManager Android 电源管理
阅读量:5926 次
发布时间:2019-06-19

本文共 2012 字,大约阅读时间需要 6 分钟。

  hot3.png

顾名思义,PowerManager.java就是管理我们电源方面的功能的,当然也包括我们屏幕的亮和熄灭。没错,我们的应用程序就是通过这个系统服务来实现亮屏和熄屏的功能的。
1. 应用程序获取PowerManager服务, 我们可以这样书写:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
因为PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们。
2. goToSleep()方法, 这个方法可以强制我们的屏幕熄屏。我们可以这样调用:
在上面拿到pm对象之后,这样调用 pm.goToSleep(SystemClock.uptimeMillis());
3. setBacklightBrightness()方法,这个方法可以设置背光的亮度,从0-255 
三. 定时熄灭屏幕
那么这里,还可以介绍一个控制屏幕的方法就是PowerManager.WakeLock
顾名思义,WakeLock这个东西就是亮屏控制,这里说的亮屏,它定义了几种类型的亮屏。如下:
类型 cpu 屏幕 键盘 
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 
由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长(大家都知道,智能手机的电池问题是一个硬伤, 每天一充电,有木有? 别人说用安卓手机的男人都是顾家好男人,因为他每天晚上都要回家充电。。^^).
好的,好的,闲话不扯,继续。。。
怎么使用这个WakeLock呢?我们可以这样写:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG"); 
wakeLock.acquire(); 
//做我们的工作,在这个阶段,我们的屏幕会持续点亮
//释放锁,屏幕熄灭。
wl.release();
那么这里我们也可以这样使用,就是多少时间后熄灭屏幕
首先点亮屏幕
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
, "TAG"); 
wakeLock.acquire(); 
然后
mTimeHandler.postDelayed(new Runnable(){
public void run(){
wakeLock.release();
}
}, 10*1000);
嗯,延迟10s后熄灭屏幕。。。。

那么,这里要注意的是acquire()和release()要成对调用哦!也就是说,你申请了亮屏,过段时间,你要是释放它。

关于int flags

  各种锁的类型对CPU 、屏幕、键盘的影响:

PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:正常唤醒锁实际上并不打开照明。相反,一旦打开他们会一直仍然保持(例如来世user的activity)。当获得wakelock,这个标志会使屏幕或/和键盘立即打开。一个典型的使用就是可以立即看到那些对用户重要的通知。

ON_AFTER_RELEASE:设置了这个标志,当wakelock释放时用户activity计时器会被重置,导致照明持续一段时间。如果你在wacklock条件中循环,这个可以用来减少闪烁

转载于:https://my.oschina.net/qsyan/blog/372301

你可能感兴趣的文章
网站分析系统
查看>>
一站式解决,Android 拍照 图库的各种问题
查看>>
219. 单页应用 会话管理(session、cookie、jwt)
查看>>
java概述
查看>>
【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点
查看>>
极限编程 (Extreme Programming) - 发布计划 (Release Planning)
查看>>
跨域的四种方式
查看>>
i-i.me:网址导航真的是伪需求吗?
查看>>
Iterator 和 for...of 循环
查看>>
关于vue父子组件之间事件触发及数据传递问题
查看>>
JavaScript数据结构与算法——集合
查看>>
JavaFX 学习笔记——窗口与控件
查看>>
82. Remove Duplicates from Sorted List II
查看>>
受 SQLite 多年青睐,C 语言到底好在哪儿?
查看>>
User Stories - 最佳实践 (Best Practices)
查看>>
纯css实现叉号
查看>>
小程序调用阿里云身份证识别OCR(附带七牛云上传图片)
查看>>
判断字符串出现次数最多的字符 及 次数
查看>>
如何解决高并发,秒杀问题
查看>>
重新学习web后端开发-001-写在前面的话
查看>>