在 Android 應用開發中,有時需要以程式碼控制螢幕的喚醒與解鎖,例如實作鬧鐘、來電畫面或遠端控制功能。這篇文章示範如何使用 PowerManager 與 KeyguardManager 達成點亮螢幕並解除鎖定鍵盤鎖的功能。
在 AndroidManifest.xml 中宣告以下權限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
建立一個工具方法 wakeAndUnlock(boolean),傳入 true 為喚醒解鎖,false 為鎖定並釋放資源:
private KeyguardManager km;
private KeyguardLock kl;
private PowerManager pm;
private PowerManager.WakeLock wl;
private void wakeAndUnlock(boolean b) {
if (b) {
// 取得電源管理服務
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
// 取得 WakeLock,ACQUIRE_CAUSES_WAKEUP 會點亮螢幕,SCREEN_BRIGHT_WAKE_LOCK 保持高亮
wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
wl.acquire(); // 點亮螢幕
// 取得鍵盤鎖管理服務
km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
kl = km.newKeyguardLock("unLock");
kl.disableKeyguard(); // 解鎖
} else {
// 重新啟用鍵盤鎖
kl.reenableKeyguard();
// 釋放 WakeLock,讓螢幕熄滅
wl.release();
}
}
SCREEN_BRIGHT_WAKE_LOCK 在 API 17 後已棄用,建議改用 FLAG_KEEP_SCREEN_ON 或 WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON。onDestroy() 或適當的生命週期中釋放 WakeLock,避免電量耗盡。此範例提供基本架構,實際專案中請根據目標 API 版本調整實作細節。