本篇文章就對 android 下,如何保持螢幕常量,做乙個簡單的記錄和總結。
使用 wakelock 是一種教科書式的比較常規的手段,使用起來也非常的簡單。
可以看到,wakelock 主要是通過 powermanager 獲取,然後通過acquire()
方法獲取乙個 wakelock 資源,wakelock 也是一種資源,在使用完成之後,別忘了呼叫release()
方法進行釋放。
使用 wakelock 還需要額外的宣告 wake_lock 許可權。
當然,使用 wakelock 暫時來看,應該還是沒有什麼問題的。但是實際上,所有和螢幕亮度相關的 wakelock 的 flag ,在 api level 17+ 之上,都已經被標記廢棄了。可以看出 android 在節能上做了很多努力,螢幕是費電大戶,既然已經被廢棄掉了,正常來說,我們還是不推薦使用的。
前面說了,wakelock 已經被標記廢棄。雖然被廢棄了,但是實際上 android 還是給我們提供了對應的解決方案的,那就是使用flag_keep_screen_on
的方式來標記螢幕常亮。
flag_keep_screen_on 使用起來也非常的簡單,它是乙個頁面 window 上的乙個 flag ,使用addflags()
方法新增。
getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on);
當然,這裡使用完成之後,也是需要取消掉的。取消這個 flag 使用clearflags()
方法來取消。
getwindow().clearflags(windowmanager.layoutparams.flag_keep_screen_on);
通常我們會在乙個 activity 的onresume()
和onpause()
方法中,分別呼叫這兩個方法。
看看 flag_keep_screen_on 的文件解釋。
從這裡可以看出來,它只作用在乙個被顯示的 window 上,並且保持裝置螢幕高亮度的常亮。
其實這裡也可以看出來,官方廢棄 wakelock 而推薦使用 flag_keep_screen_on ,一部分原因在於 wakelock 是乙個全域性的資源,而 flag_keep_screen_on 只是乙個和 window 相關的資源,作用範圍更小了一些。並且它比 wakelock 更好的一點在於,它不需要額外的申請許可權,一般來說,我們還是推薦使用它的。
除了給 window 新增乙個 flag_keep_screen_on 的 flag 之外,還可以對當前可見的 view 呼叫 keepscreenon() 方法來設定螢幕常亮。
keepscreenon() 是 view 物件上的方法,同時也提供了布局中的屬性android:keepscreenon
來方便我們在布局中對其進行設定。
需要注意的一點,使用 keepscreenon() 設定的常亮標識,需要當前 view 保持螢幕可見才行。所以一般而言,我們會在頁面的根布局中,新增此屬性。
通過文件可以看到,實際上它的原理和 flag_keep_screen_on 一樣的,只是它更簡單,只需要對某個 view 設定,如果該 view 可見即生效,否者就不生效。
保持螢幕常亮的方式有很多,選用我們需要的即可。當然,最好還是不要使用 wakelock 了,比較已經被標記為廢棄了。
Android保持螢幕常亮
方法一 新增許可權 powermanager pm powermanager getsystemservice context.power service powermanager.wakelock mwakelock pm.newwakelock powermanager.screen dim w...
Android 保持螢幕常亮
在activity的oncreate bundle 中新增以下 getwindow addflags windowmanager.layoutparams.flag keep screen on clearflags int 方法用來關閉 getwindow clearflags windowman...
Android 如何保持螢幕常亮
for example public class mainactivity extends activity 這個方法的好處是,與wakelocks不同 我們將在keep the cpu on文章中 它不需要具體的許可權,並且在換不同應用程式的操作中,系統會管理,不必擔心沒有釋放的未使用的資源。另一...