亮屏需求:1. 使屏幕常亮(满足条件下:收到特定广播后,使屏幕常亮;收到另一特定广播,取消常亮功能)
2. 屏幕自动熄灭后,将屏幕亮起(包括:手机在指定时间后自动熄灭,按下锁屏键后熄灭)
三种方案:
(1)通过view.Window实现
Window window;
window=getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//取消亮屏
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这种方法可以实现屏幕常亮与取消常亮功能,但在屏幕自动熄灭后无法点亮屏幕。
因为Window:通过控制顶层窗口的外观行为,使屏幕亮起;屏幕自动熄灭后会锁屏,所以无法点亮屏幕,只能保持屏幕常亮。
(2)通过WakeLock实现
要申请权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
获取电源管理器对象
PowerManager mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean screenOn = mPowerManager.isScreenOn();
if (!screenOn) {
// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
mWakeLock.acquire(1000); // 点亮屏幕
}
//释放屏幕锁
if (null != mWakeLock) {
mWakeLock.release();
}
这种方法可以实现屏幕常亮与取消常亮功能,也可在屏幕熄灭后点亮屏幕(包括按电源键熄灭屏幕)。
PowerManager.
SCREEN_DIM_WAKE_LOCK //屏幕常亮,但是不会持续高亮,会变暗
PowerManager.
ACQUIRE_CAUSES_WAKEUP
| PowerManager.
SCREEN_BRIGHT_WAKE_LOCK
//屏幕保持常亮
PowerManager:此类使您能够控制设备的电源状态。
PowerManager WakeLock:唤醒锁是一种机制, 用于指示应用程序需要使设备保持不动。
唤醒锁级别, 并对系统电源产生不同的影响。这些级别是互斥的-只能指定其中之一.见下表:

如果您持有部分唤醒锁, CPU 将继续运行, 无论显示超时或屏幕状态如何, 甚至在用户按下电源按钮后。在所有其他唤醒锁中, CPU 将运行, 但用户仍然可以使用电源按钮使设备休眠。
此外, 还可以添加另外两个标志, 仅影响屏幕的行为。当与 PARTIAL_WAKE_LOCK合并时, 这些标志不起作用.

(3)
在布局文件里加上android:keepScreenOn="true"