一瘪吏、前言
在實際開發(fā)的過程中,會有一些需要保持屏幕常亮舵抹,避免進入鎖屏狀態(tài)的需求肪虎。最常見的就是視頻播放的過程中,如果屏幕突然暗了惧蛹,或者直接鎖屏扇救,會非常的影響用戶的體驗。
本篇文章就對 Android 下香嗓,如何保持屏幕常量迅腔,做一個簡單的記錄和總結(jié)。
二靠娱、幾種常見的方法
1沧烈、WakeLock
使用 WakeLock 是一種教科書式的比較常規(guī)的手段,使用起來也非常的簡單像云。
可以看到锌雀,WakeLock 主要是通過 PowerManager 獲取蚂夕,然后通過acquire()方法獲取一個 WakeLock 資源,WakeLock 也是一種資源腋逆,在使用完成之后婿牍,別忘了調(diào)用release()方法進行釋放。
使用 WakeLock 還需要額外的聲明 WAKE_LOCK 權(quán)限惩歉。
當然等脂,使用 WakeLock 暫時來看,應(yīng)該還是沒有什么問題的撑蚌。但是實際上上遥,所有和屏幕亮度相關(guān)的 WakeLock 的 Flag ,在 API level 17+ 之上争涌,都已經(jīng)被標記廢棄了粉楚。可以看出 Android 在節(jié)能上做了很多努力第煮,屏幕是費電大戶解幼,既然已經(jīng)被廢棄掉了,正常來說包警,我們還是不推薦使用的撵摆。
更多和 PowerManager.WakeLock 相關(guān)的內(nèi)容,可以看看之前的一篇文章《PowerManager 不是只有 WakeLock 》害晦。
2特铝、FLAG_KEEP_SCREEN_ON
前面說了,WakeLock 已經(jīng)被標記廢棄壹瘟。雖然被廢棄了鲫剿,但是實際上 Android 還是給我們提供了對應(yīng)的解決方案的,那就是使用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()方法中,分別調(diào)用這兩個方法李丰。
看看 FLAG_KEEP_SCREEN_ON 的文檔解釋苦锨。
從這里可以看出來,它只作用在一個被顯示的 Window 上,并且保持設(shè)備屏幕高亮度的常亮舟舒。
其實這里也可以看出來拉庶,官方廢棄 WakeLock 而推薦使用 FLAG_KEEP_SCREEN_ON ,一部分原因在于 WakeLock 是一個全局的資源魏蔗,而 FLAG_KEEP_SCREEN_ON 只是一個和 window 相關(guān)的資源砍的,作用范圍更小了一些痹筛。并且它比 WakeLock 更好的一點在于莺治,它不需要額外的申請權(quán)限,一般來說帚稠,我們還是推薦使用它的谣旁。
3、keepScreenOn
除了給 Window 添加一個 FLAG_KEEP_SCREEN_ON 的 Flag 之外滋早,還可以對當前可見的 View 調(diào)用 keepScreenOn() 方法來設(shè)置屏幕常亮榄审。
keepScreenOn() 是 View 對象上的方法,同時也提供了布局中的屬性android:keepScreenOn來方便我們在布局中對其進行設(shè)置杆麸。
需要注意的一點搁进,使用 keepScreenOn() 設(shè)置的常亮標識,需要當前 View 保持屏幕可見才行昔头。所以一般而言饼问,我們會在頁面的根布局中,添加此屬性揭斧。
通過文檔可以看到莱革,實際上它的原理和 FLAG_KEEP_SCREEN_ON 一樣的,只是它更簡單讹开,只需要對某個 View 設(shè)置盅视,如果該 View 可見即生效,否者就不生效旦万。
4闹击、MediaPlayer的 setScreenOnWhilePlaying()
如果我們是使用一個 MediaPlayer 來進行視頻播放的話,MediaPlayer 還提供了setScreenOnWhilePlaying()方法成艘,來設(shè)置屏幕常量赏半。
其實沒什么好說的,繼續(xù)查看源碼可以看到其實最終調(diào)用的還是keepScreenOn()方法狰腌。當然多了解一種方法也沒有什么壞處除破。
三、小結(jié)
保持屏幕常亮的方式有很多琼腔,選用我們需要的即可瑰枫。當然,最好還是不要使用 WakeLock 了,比較已經(jīng)被標記為廢棄了光坝。