2010-05-05 114 views
9

我發現兩種方法在保持在屏幕上:保持屏幕上,哪種方式?

第一個是簡單的:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

第二個是使用激活鎖定,並需要額外的權限:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen"); 

有這兩種方法之間有什麼真正的區別,除了第二種方法比較複雜,需要額外的許可?最終結果總是一樣嗎?

+0

*如果*一個需要許可,其他沒有,有**是**肯定是差(或API中的錯誤)。但是,我不知道有什麼區別。 – 2010-05-05 09:27:50

+0

權限可能在那裏,因爲你可以用它做更強大的事情,不僅保持屏幕開啓。我只是想知道更多關於最終結果的信息,如果兩種方式總是保持屏幕無論如何。 – 2010-05-05 09:47:46

回答

22

您應該看到Coding for (Battery) Life谷歌IO演示,幻燈片16

如果你不想的話:你可以做的XML中的任何一個佈局元素的第一個,它是建議之一來使用(不知道把它應用到窗口上,可能會和wakelock一樣糟糕,不知道)。

XML:

​​

窗口標誌:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
+0

謝謝,我不知道xml的方式。我認爲它幾乎與窗口一樣。然而在演講中,它說如果忘記了喚醒鎖,則代價很高。所以如果做得對,他們應該沒問題。 看來最終的結果是一樣的。那麼我會選擇推薦的方式。 – 2010-05-05 09:46:12

+1

@JanS。您應該觀看視頻:http://www.youtube.com/watch?feature = player_detailpage&v = OUemfrKe65c#t = 1793(在29:53)。如果你只有一個基於UI的應用程序,使用wakelock和它的權限是不需要的,並且在有錯誤或崩潰的情況下是非常有問題的。如果您使用此標誌,您可以避免使用喚醒鎖,只要用戶停留在當前佈局上就可以保持屏幕顯示。 – 2014-01-19 17:50:06