Android 保持屏幕常亮的3
种实现
1.
持有WakeLock
// 1. 此种方式,需要申明权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
// 2. 通过PowerManager获取屏幕电源管理的服务
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
if (powerManager != null) {
// PowerManager.FULL_WAKE_LOCK 这里有几个Flag,分别对应几种形式的电源管理状态
// 比如:屏幕常亮等
// WakeLock获取时相关的flag如下所示:
// 1. PARTIAL_WAKE_LOCK :保持CPU 运转,屏幕和键盘灯有可能是关闭的。
// 2. SCREEN_DIM_WAKE_LOCK :保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
// 3. SCREEN_BRIGHT_WAKE_LOCK :保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
// 4. FULL_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "WakeLock");
}
// 3. 一般在单个Activity中实现方式(一定要保证申请获取和释放是成对出现)
/**
* 控制手机电源管理.
*/
public PowerManager.WakeLock mWakeLock;
@Override
protected void onResume() {
super.onResume();
getWakeLock(this)
}
@Override
protected void onPause() {
super.onPause();
releaseWakeLock(this);
}
/**
* 1. 点亮屏幕,防止屏幕息屏
*/
@SuppressLint("InvalidWakeLockTag")
public void getWakeLock(Context ctx) {
if (mWakeLock == null) {
// 应用程序获取PowerManager服务
// PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们
PowerManager pMgr = (PowerManager) ctx
.getSystemService(Context.POWER_SERVICE);
mWakeLock = pMgr.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "wakeLock");
}
if (mWakeLock != null && !mWakeLock.isHeld()) {
mWakeLock.acquire();
}
}
/**
* 2. 释放常亮锁
*
* @param ctx
*/
public void releaseWakeLock(Context ctx) {
try {
if (mWakeLock != null && mWakeLock.isHeld()) {
mWakeLock.release();
}
} catch (Throwable t) {
t.printStackTrace();
}
}
2.
在Window设置flag (官方推荐
)
// 这种方式不需要申请权限
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
3.
在界面布局xml中顶层添加属性
// 界面xml文件中的顶层布局添加属性即可
android:keepScreenOn="true"