Android亮屏和熄屏控制
来源:互联网 发布:usb分享电脑网络 编辑:程序博客网 时间:2024/06/02 18:26
Android系统提供了电源管理的类PowerManager;调用相应的属性即可实现;
系统服务 --- PowerManager.java
顾名思义,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_LOCKonoffoffSCREEN_DIM_WAKE_LOCKondimoffSCREEN_BRIGHT_WAKE_LOCKonBrightoffFULL_WAKE_LOCKonBrightBright
由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长(大家都知道,智能手机的电池问题是一个硬伤, 每天一充电,有木有? 别人说用安卓手机的男人都是顾家好男人,因为他每天晚上都要回家充电。。^^).
好的,好的,闲话不扯,继续。。。
怎么使用这个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()要成对调用哦!也就是说,你申请了亮屏,过段时间,你要是释放它。
PowerManager这个类提供了电源管理的一些功能,比如可以让屏幕或者键盘亮起来等。还有对设备的重启的api
官网是这么解释的
PowerManager Class Overview
这个类提供了控制设备电源状态的管理功能。
设备的电池的持续时间(寿命)会受到使用这个API的重要影响。在非必要的情况下不要使用WakeLock,即使必须使用,也要最低限度使用这个api,使用完之后应确保立即释放掉。
通过 Context.getSystemService()获得PowerManager的实例。
使用PowerManager的实例去获得一个WakeLock对象,使用这个方法:newWakeLock() 创建一个
PowerManager.WakeLock
对象.使用WakeLock对象可以去管理设备电源的状态,使用方法特别简单:如下例子
<span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">PowerManager</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> pm </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">)</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> getSystemService</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">Context</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);">POWER_SERVICE</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">);</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> </span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">WakeLock</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> wl </span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">=</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> pm</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);">newWakeLock</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">(</span><span class="typ" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 0, 102);">PowerManager</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);">SCREEN_DIM_WAKE_LOCK</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">,</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> </span><span class="str" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 136, 0);">"My Tag"</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">);</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> wl</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);">acquire</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> //在释放之前,屏幕一直亮着(有可能会变暗,但是还可以看到屏幕内容)</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> wl</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">.</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);">release</span><span class="pun" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(102, 102, 0);">();</span><span class="pln" style="padding: 0px; margin: 0px; line-height: 25.2000007629395px; color: rgb(0, 0, 0);"> </span>
下面定义的这些标记不同程度的影响系统电源。这些标记都是独占的,并且每次只能指定其中一个。
PARTIAL_WAKE_LOCK
SCREEN_DIM_WAKE_LOCK
SCREEN_BRIGHT_WAKE_LOCK
FULL_WAKE_LOCK
如果你使用的是局部唤醒锁的话(使用PARTIAL_WAKE_LOCK标志),CPU会继续运行,将忽略任何的计时器,甚至按下电源按钮。其他的唤醒锁话,CPU也会继续运转,但是使用者仍然可以按电源按钮让设备睡眠。
另外,你可以使用两个以上的标记,但是他只影响屏幕的行为。和 PARTIAL_WAKE_LOCK 同时使用的话,没有任何影响。
ACQUIRE_CAUSES_WAKEUP
ON_AFTER_RELEASE
一个小例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<strong>
package
com.example.powers;
import
android.os.Bundle;
import
android.os.PowerManager;
import
android.os.PowerManager.WakeLock;
import
android.app.Activity;
import
android.content.Context;
import
android.util.Log;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.support.v4.app.NavUtils;
public
class
MainActivity
extends
Activity {
private
WakeLock wakeLock;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected
void
onResume() {
super
.onResume();
// 开始获得唤醒锁
acquireWakeLock();
}
@Override
public
void
finish() {
super
.finish();
// 释放锁
releaseWakeLock();
}
private
void
acquireWakeLock() {
if
(wakeLock ==
null
) {
Log.d(
"debug"
,
"Acquiring wake lock"
);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,
this
.getClass().getCanonicalName());
wakeLock.acquire();
}
}
private
void
releaseWakeLock() {
if
(wakeLock !=
null
&& wakeLock.isHeld()) {
wakeLock.release();
wakeLock =
null
;
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return
true
;
}
}</strong>
0 1
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏和熄屏控制
- Android亮屏、熄屏控制
- Android锁屏控制
- android游戏教程:实现触屏控制和虚拟按键
- 锁屏和亮屏控制
- android,锁屏控制音乐
- android 锁屏音乐控制
- WakeLock 唤醒锁-Android亮屏、熄屏控制
- Android 输入控制和Button
- Android修改源代码控制永不锁屏
- phonegap2.9 ios提交app 报"ERROR ITMS-90086"错误,如何支持64位ios
- Cocos2d-x 3.2 Lua示例FontTest(字体测试)
- JQuery 未知异常: Maximum call stack size exceeded
- 最成功的 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Android 调用市场软件实现软件评分
- Android亮屏和熄屏控制
- 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题
- debian支持ll命令
- volley okhttp universal-image-loader对比分析
- 小胖说事25----iOS7状态栏默认文字颜色修改
- JavaScript教程
- Netty4源码分析-NioEventLoop实现的线程运行逻辑
- 安卓调试 cocos2d
- 链式存储(头插法、尾插法)