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"