2012-03-10 43 views
2

我寫了Android 2.1系統下,我在我的(越獄)的Nook簡單的觸摸(又名NST)運行一個簡單的鬧鐘風格的應用程序。如何編程方式關閉Android設備上的屏幕/鎖屏(角落簡單的觸摸)

當預定的報警時間到達時,我的應用程序需要喚醒NST和顯示HTML內容的頁面。我使用AlarmManager在正確的時間進行回調,並且似乎按預期工作 - 差不多。

問題當足夠的空閒時間已經過去,所述NST已經激活其鎖定屏幕模式下時(即,它是自動顯示一個著名的作者的漫畫)。我無法找到解除鎖定屏幕的程序化方式,以便我的HTML內容可見。我可以看到我的警報回調例程在預期的時間運行(通過Eclipse中的LogCat視圖,在我用adb重新連接到NST之後),並且在用手指「手動解鎖」後,我可以看到我的應用程序窗口按預期更新,但我需要讓警報事件發生時文本變得可見,而不僅僅是在用戶解鎖設備之後。我嘗試了下面顯示的代碼(基於其他StackOverflow答案),但它沒有幫助。

有關如何做到這一點的任何想法? (技術上的一個解決方案是始終將FLAG_KEEP_SCREEN_ON設置在我的窗口上,這樣着名作者鎖定屏幕永遠不會出現在第一位,但這會使NST保持清醒狀態,因此它會很快耗盡電池,所以我想避免,如果可能的話)

private void wakeUpTheScreen() 
{ 
    Window win = getWindow(); 
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
} 

回答

3

哈,我想通了(從previous StackOverflow answers一些更多的幫助)我在做什麼錯。

問題與上述鏈接中描述的一樣 - AlarmManager正在按照預期調用我的BroadcastReceiver,然後我的BroadcastReceiver會向我的AlarmHandler發送Message()消息(如我鬧着說的報警示例中所示)。但是,在返回onReceive()之後,Nook會立即回到睡眠狀態,這意味着輔助處理程序永遠不會被調用,因此我的wakeUpTheScreen()方法沒有得到執行。

我感動wakeUpTheScreen()調用,以便它現在被直接從onReceived()方法調用,而現在的喚醒工作正常。 :^)

+0

偉大的提示,對我來說,它將標誌放在活動的onResume下 – auval 2015-06-07 21:11:36

相關問題