项目中有用到安卓对电池的操作,需要保持屏幕高亮显示,关于各参数的复合使用什么的感觉很乱,在这里整理一下。
PowerManager的权限声明
PowerManager的任何操作都必须声明权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
PowerManager.WakeLock的常规使用
对于WeakLock的操作,acquire()方法和release()方法必须成对出现,即加锁之后一定要释放锁。
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK , "My lock");
wakeLock.acquire();
wakeLock.release();
PowerManager的参数
以下4个参数之间只能独立使用
参数 | CPU | 屏幕 | 键盘灯 |
PARTIAL_WAKE_LOCK | 保持运转 | 会关闭 | 会关闭 |
SCREEN_DIM_WAKE_LOCK | 保持运转 | 会变低亮 | 会关闭 |
SCREEN_BRIGHT_WAKE_LOCK | 保持运转 | 高亮 | 会关闭 |
FULL_WAKE_LOCK | 保持运转 | 高亮 | 高亮 |
关于屏幕和键盘灯会关闭的理解,例如SCREEN_DIM_WAKE_LOCK,在系统默认的降低屏幕亮度时间到达之后,手机屏幕将会变暗 ,但不会熄屏,键盘灯也会关闭(部分设备键盘灯不关闭)。
使用PARTIAL_WAKE_LOCK锁时,按下电源键,CPU将仍处于运行状态,除非release掉此锁。使用其他三个锁的时候,手机CPU会保持运转,但如果主动按下电源键,CPU将进入休眠。
以下2个参数不可独立使用,必须与上面的参数一起使用
参数 | 功能 | ||
ACQUIRE_CAUSES_WAKE_UP | 强制使屏幕亮起 | ||
ON_AFTER_RELEASE | 释放锁时,屏幕稍后关闭 |
ACQUIRE_CAUSES_WAKE_UP会使屏幕无论在合作状态下,立即高亮显示,但必须配合以上四个参数使用:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK |powerManager.ON_AFTER_RELEASE, "My lock");
wakeLock.acquire();
wakeLock.release();
以上复合使用了三个参数 ACQUIRE_CAUSES_WAKE_UP、FULL_WAKE_LOCK、ON_AFTER_RELEASE,含义是让设备无论在何种状态下都立即点亮屏幕并一直保持高亮显示,且在release()之后,设备稍后(系统默认的降低屏幕亮度时间到达之后)关闭屏幕与键盘灯。
注意:
FULL_WAKE_LOCK属性在API 17中不可用。
如果需要在activity级别使屏幕保持高亮,也可以使用WindowManager.LayoutParams中的方法,WindowManager.LayoutParams 是 WindowManager 接口的嵌套类。在activity的onCreate()方法中添加:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
可以使当前可见的activity保持高亮。