官方资料
http://developer.android.com/intl/zh-CN/reference/android/os/PowerManager.WakeLock.html
http://developer.android.com/intl/zh-CN/reference/android/os/PowerManager.html
http://developer.android.com/intl/zh-CN/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON
示例
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); wl.acquire(); ..screen will stay on during this section.. wl.release();
需要在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Dim:逐渐变暗
Bright:保持亮度
类型
保持屏幕与键盘背光均为最大亮度,当Power键按下后,此锁会被系统释放。屏幕与CPU均关闭,与PARTIAL_WAKE_LOCK相反。
持锁将保持屏幕背光为最大亮度,而键盘背光可以熄灭。按下Power键后,此锁将会被系统自动释放,释放后屏幕与CPU均关闭。
持锁将保持屏幕背光常亮,但可以Dim,键盘背光可以熄灭。同样,在按下Power键后会被系统自动释放,CPU与屏幕均关闭。
使用方法
首先,使用PowerManager的newWakelock方法:
PowerManager.WakeLock newWakeLock(int levelAndFlags, String tag)
作用:新建一个名为tag的levelAndFlags类型的wakelock。
参数:
levelAndFlags:即为上边所介绍的类型;tag:锁的名字,每个wakelock有唯一的名字。
例: PowerManager pm = (PowerManager)mContext.getSystemService( Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);
接口操作
void acquire() 持锁;
void acquire(long timeout) 持锁,timeout毫秒后自动释放;
boolean isHeld() 返回锁的状态,true为正被持锁,false为被释放或未被持锁;
void release() 释放锁;
void setReferenceCounted(boolean value) 设置wakelock的计数机制,默认为计数。true为计数,false为不计数。
计数:每一个acquire必须对应一个release;
不计数:无论有多少个acquire,一个release就可以释放。
void setWorkSource(WorkSource ws) 设置工作域。可能有多个应用将会用到同一个wakelock,这个是用来确认这个wakelock是给哪个应用使用。如service;
String toString() 返回当前目标的一些描述。
关于FLAG_KEEP_SCREEN_ON
用法:
Window w = activity.getWindow(); // in Activity's onCreate() for instance w.setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );