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

承香墨影發表於2017-05-31

版權宣告:

本賬號釋出文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。

未經允許,不得轉載。

一、前言

在實際開發的過程中,會有一些需要保持螢幕常亮,避免進入鎖屏狀態的需求。最常見的就是視訊播放的過程中,如果螢幕突然暗了,或者直接鎖屏,會非常的影響使用者的體驗。

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

二、幾種常見的方法

1、WakeLock

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

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

可以看到,WakeLock 主要是通過 PowerManager 獲取,然後通過 acquire() 方法獲取一個 WakeLock 資源,WakeLock 也是一種資源,在使用完成之後,別忘了呼叫 release() 方法進行釋放。

使用 WakeLock 還需要額外的宣告 WAKE_LOCK 許可權。

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

當然,使用 WakeLock 暫時來看,應該還是沒有什麼問題的。但是實際上,所有和螢幕亮度相關的 WakeLock 的 Flag ,在 API level 17+ 之上,都已經被標記廢棄了。可以看出 Android 在節能上做了很多努力,螢幕是費電大戶,既然已經被廢棄掉了,正常來說,我們還是不推薦使用的。

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

2、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 的文件解釋。

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

從這裡可以看出來,它只作用在一個被顯示的 Window 上,並且保持裝置螢幕高亮度的常亮。

其實這裡也可以看出來,官方廢棄 WakeLock 而推薦使用 FLAG_KEEP_SCREEN_ON ,一部分原因在於 WakeLock 是一個全域性的資源,而 FLAG_KEEP_SCREEN_ON 只是一個和 window 相關的資源,作用範圍更小了一些。並且它比 WakeLock 更好的一點在於,它不需要額外的申請許可權,一般來說,我們還是推薦使用它的。

3、keepScreenOn

除了給 Window 新增一個 FLAG_KEEP_SCREEN_ON 的 Flag 之外,還可以對當前可見的 View 呼叫 keepScreenOn() 方法來設定螢幕常亮。

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

需要注意的一點,使用 keepScreenOn() 設定的常亮標識,需要當前 View 保持螢幕可見才行。所以一般而言,我們會在頁面的根佈局中,新增此屬性。

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

通過文件可以看到,實際上它的原理和 FLAG_KEEP_SCREEN_ON 一樣的,只是它更簡單,只需要對某個 View 設定,如果該 View 可見即生效,否者就不生效。

4、MediaPlayer的 setScreenOnWhilePlaying()

如果我們是使用一個 MediaPlayer 來進行視訊播放的話,MediaPlayer 還提供了 setScreenOnWhilePlaying() 方法,來設定螢幕常量。

其實沒什麼好說的,繼續檢視原始碼可以看到其實最終呼叫的還是 keepScreenOn() 方法。當然多瞭解一種方法也沒有什麼壞處。

三、小結

保持螢幕常亮的方式有很多,選用我們需要的即可。當然,最好還是不要使用 WakeLock 了,比較已經被標記為廢棄了。

Android 保持螢幕常亮的幾種方法
公眾號二維碼.jpg

相關文章