Android 保持屏幕常亮的幾種方法

版權聲明:android

本帳號發佈文章均來自公衆號,承香墨影(cxmyDev),版權歸承香墨影全部。markdown

未經容許,不得轉載。佈局

1、前言

在實際開發的過程當中,會有一些須要保持屏幕常亮,避免進入鎖屏狀態的需求。最多見的就是視頻播放的過程當中,若是屏幕忽然暗了,或者直接鎖屏,會很是的影響用戶的體驗。ui

本篇文章就對 Android 下,如何保持屏幕常量,作一個簡單的記錄和總結。spa

2、幾種常見的方法

一、WakeLock

使用 WakeLock 是一種教科書式的比較常規的手段,使用起來也很是的簡單。3d


能夠看到,WakeLock 主要是經過 PowerManager 獲取,而後經過 acquire() 方法獲取一個 WakeLock 資源,WakeLock 也是一種資源,在使用完成以後,別忘了調用 release() 方法進行釋放。

使用 WakeLock 還須要額外的聲明 WAKE_LOCK 權限。code

<uses-permission android:name="android.permission.WAKE_LOCK" />orm

固然,使用 WakeLock 暫時來看,應該仍是沒有什麼問題的。可是實際上,全部和屏幕亮度相關的 WakeLock 的 Flag ,在 API level 17+ 之上,都已經被標記廢棄了。能夠看出 Android 在節能上作了不少努力,屏幕是費電大戶,既然已經被廢棄掉了,正常來講,咱們仍是不推薦使用的。視頻

更多和 PowerManager.WakeLock 相關的內容,能夠看看以前的一篇文章《PowerManager 不是隻有 WakeLock 》。對象

二、FLAG_KEEP_SCREEN_ON

前面說了,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 更好的一點在於,它不須要額外的申請權限,通常來講,咱們仍是推薦使用它的。

三、keepScreenOn

除了給 Window 添加一個 FLAG_KEEP_SCREEN_ON 的 Flag 以外,還能夠對當前可見的 View 調用 keepScreenOn() 方法來設置屏幕常亮。

keepScreenOn() 是 View 對象上的方法,同時也提供了佈局中的屬性 android:keepScreenOn 來方便咱們在佈局中對其進行設置。

須要注意的一點,使用 keepScreenOn() 設置的常亮標識,須要當前 View 保持屏幕可見才行。因此通常而言,咱們會在頁面的根佈局中,添加此屬性。

經過文檔能夠看到,實際上它的原理和 FLAG_KEEP_SCREEN_ON 同樣的,只是它更簡單,只須要對某個 View 設置,若是該 View 可見即生效,否者就不生效。

四、MediaPlayer的 setScreenOnWhilePlaying()

若是咱們是使用一個 MediaPlayer 來進行視頻播放的話,MediaPlayer 還提供了 setScreenOnWhilePlaying() 方法,來設置屏幕常量。

其實沒什麼好說的,繼續查看源碼能夠看到其實最終調用的仍是 keepScreenOn() 方法。固然多瞭解一種方法也沒有什麼壞處。

3、小結

保持屏幕常亮的方式有不少,選用咱們須要的便可。固然,最好仍是不要使用 WakeLock 了,比較已經被標記爲廢棄了。

公衆號二維碼.jpg
相關文章
相關標籤/搜索