2010-05-23 103 views
14

我想解鎖屏幕並將其打開,以顯示事件觸發器上的彈出窗口。我能夠解鎖屏幕使用以編程方式打開屏幕

newKeyguardLock = km.newKeyguardLock(HANDSFREE); 
newKeyguardLock.disableKeyguard(); 

on KeyGuardService但我無法打開屏幕。我正在使用

wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE); 
wl.acquire(); 

但沒有成功。屏幕仍然關閉。 我該如何做到這一點?

回答

30

阿米爾的回答讓我接近,但你需要的ACQUIRE_CAUSES_WAKEUP標誌至少(構建中的Android 2.3.3)。

WakeLock screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
    PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
screenLock.acquire(); 

//later 
screenLock.release(); 
+0

謝謝!它適用於我 – ihrupin 2012-08-26 22:42:13

+0

工作對我來說很好 – 2013-04-19 06:14:27

+0

在棉花糖上對我很好。 – March3April4 2017-09-04 05:19:56

2

在您的主要活動的OnCreate()寫下面的代碼:

((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG").acquire(); 

它會導致設備喚醒。

不要忘記disableKeyguard()來解鎖設備...

0

不確定的答案與空指針檢查和設置超時:

private void turnOnScreen() { 
    PowerManager.WakeLock screenLock = null; 
    if ((getSystemService(POWER_SERVICE)) != null) { 
     screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
       PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
     screenLock.acquire(10*60*1000L /*10 minutes*/); 


     screenLock.release(); 
    } 
}