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

版權(quán)聲明:

本賬號(hào)發(fā)布文章均來自公眾號(hào),承香墨影(cxmyDev),版權(quán)歸承香墨影所有。

未經(jīng)允許,不得轉(zhuǎn)載。

一、前言

在實(shí)際開發(fā)的過程中,會(huì)有一些需要保持屏幕常亮,避免進(jìn)入鎖屏狀態(tài)的需求。最常見的就是視頻播放的過程中,如果屏幕突然暗了,或者直接鎖屏,會(huì)非常的影響用戶的體驗(yàn)。

本篇文章就對(duì) Android 下,如何保持屏幕常量,做一個(gè)簡(jiǎn)單的記錄和總結(jié)。

二、幾種常見的方法

1、WakeLock

使用 WakeLock 是一種教科書式的比較常規(guī)的手段,使用起來也非常的簡(jiǎn)單。


可以看到,WakeLock 主要是通過 PowerManager 獲取,然后通過 acquire() 方法獲取一個(gè) WakeLock 資源,WakeLock 也是一種資源,在使用完成之后,別忘了調(diào)用 release() 方法進(jìn)行釋放。

使用 WakeLock 還需要額外的聲明 WAKE_LOCK 權(quán)限。

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

當(dāng)然,使用 WakeLock 暫時(shí)來看,應(yīng)該還是沒有什么問題的。但是實(shí)際上,所有和屏幕亮度相關(guān)的 WakeLock 的 Flag ,在 API level 17+ 之上,都已經(jīng)被標(biāo)記廢棄了??梢钥闯?Android 在節(jié)能上做了很多努力,屏幕是費(fèi)電大戶,既然已經(jīng)被廢棄掉了,正常來說,我們還是不推薦使用的。

更多和 PowerManager.WakeLock 相關(guān)的內(nèi)容,可以看看之前的一篇文章《PowerManager 不是只有 WakeLock 》。

2、FLAG_KEEP_SCREEN_ON

前面說了,WakeLock 已經(jīng)被標(biāo)記廢棄。雖然被廢棄了,但是實(shí)際上 Android 還是給我們提供了對(duì)應(yīng)的解決方案的,那就是使用 FLAG_KEEP_SCREEN_ON 的方式來標(biāo)記屏幕常亮。

FLAG_KEEP_SCREEN_ON 使用起來也非常的簡(jiǎn)單,它是一個(gè)頁(yè)面 Window 上的一個(gè) Flag ,使用 addFlags() 方法添加。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

當(dāng)然,這里使用完成之后,也是需要取消掉的。取消這個(gè) Flag 使用 clearFlags() 方法來取消。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

通常我們會(huì)在一個(gè) Activity 的 onResume()onPause() 方法中,分別調(diào)用這兩個(gè)方法。

看看 FLAG_KEEP_SCREEN_ON 的文檔解釋。


從這里可以看出來,它只作用在一個(gè)被顯示的 Window 上,并且保持設(shè)備屏幕高亮度的常亮。

其實(shí)這里也可以看出來,官方廢棄 WakeLock 而推薦使用 FLAG_KEEP_SCREEN_ON ,一部分原因在于 WakeLock 是一個(gè)全局的資源,而 FLAG_KEEP_SCREEN_ON 只是一個(gè)和 window 相關(guān)的資源,作用范圍更小了一些。并且它比 WakeLock 更好的一點(diǎn)在于,它不需要額外的申請(qǐng)權(quán)限,一般來說,我們還是推薦使用它的。

3、keepScreenOn

除了給 Window 添加一個(gè) FLAG_KEEP_SCREEN_ON 的 Flag 之外,還可以對(duì)當(dāng)前可見的 View 調(diào)用 keepScreenOn() 方法來設(shè)置屏幕常亮。

keepScreenOn() 是 View 對(duì)象上的方法,同時(shí)也提供了布局中的屬性 android:keepScreenOn 來方便我們?cè)诓季种袑?duì)其進(jìn)行設(shè)置。

需要注意的一點(diǎn),使用 keepScreenOn() 設(shè)置的常亮標(biāo)識(shí),需要當(dāng)前 View 保持屏幕可見才行。所以一般而言,我們會(huì)在頁(yè)面的根布局中,添加此屬性。

通過文檔可以看到,實(shí)際上它的原理和 FLAG_KEEP_SCREEN_ON 一樣的,只是它更簡(jiǎn)單,只需要對(duì)某個(gè) View 設(shè)置,如果該 View 可見即生效,否者就不生效。

4、MediaPlayer的 setScreenOnWhilePlaying()

如果我們是使用一個(gè) MediaPlayer 來進(jìn)行視頻播放的話,MediaPlayer 還提供了 setScreenOnWhilePlaying() 方法,來設(shè)置屏幕常量。

其實(shí)沒什么好說的,繼續(xù)查看源碼可以看到其實(shí)最終調(diào)用的還是 keepScreenOn() 方法。當(dāng)然多了解一種方法也沒有什么壞處。

三、小結(jié)

保持屏幕常亮的方式有很多,選用我們需要的即可。當(dāng)然,最好還是不要使用 WakeLock 了,比較已經(jīng)被標(biāo)記為廢棄了。

公眾號(hào)二維碼.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言 在實(shí)際開發(fā)的過程中,會(huì)有一些需要保持屏幕常亮,避免進(jìn)入鎖屏狀態(tài)的需求。最常見的就是視頻播放的過程中,如果...
    別拿分?jǐn)?shù)嚇我媽閱讀 2,078評(píng)論 0 3
  • 生活總是讓我們遍體鱗傷,但到后來,那些受傷的地方一定會(huì)變成我們最強(qiáng)壯的地方。---海明威 WakeLock是什么 ...
    小草凡閱讀 30,234評(píng)論 2 18
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,899評(píng)論 2 45
  • 這冬天,還是那么的冷。冬風(fēng)凄慘的吹著門窗,呼嘯著。窗被拍打著,發(fā)出碰撞的聲音。 “伴啊,窗又要換了。”躺在床上的女...
    莫笛閱讀 261評(píng)論 1 0
  • 摘要:本文適用于mysql5.5 mysql5.6 其他版本未測(cè)試 mysql -u帳號(hào) -p密碼 登錄mysql...
    暖夏未眠丶閱讀 1,258評(píng)論 0 2

友情鏈接更多精彩內(nèi)容