偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

設(shè)備息屏?不存在的!保持 Android 常亮的幾種方法!

企業(yè)動(dòng)態(tài)
在實(shí)際開發(fā)過(guò)程中,會(huì)有一些需要保持屏幕常亮的需求。如果不特殊設(shè)置,通常我們的手機(jī)在靜置一段時(shí)間之后,就會(huì)自動(dòng)進(jìn)入息屏狀態(tài),而我們要做的就是阻止它進(jìn)入息屏狀態(tài)。

[[218814]]

一、前言

在實(shí)際開發(fā)過(guò)程中,會(huì)有一些需要保持屏幕常亮的需求。如果不特殊設(shè)置,通常我們的手機(jī)在靜置一段時(shí)間之后,就會(huì)自動(dòng)進(jìn)入息屏狀態(tài),而我們要做的就是阻止它進(jìn)入息屏狀態(tài)。

這個(gè)功能,使用場(chǎng)景要從實(shí)際情況出發(fā),例如:播放器,還有一些向智能電視投屏的手機(jī) App ,都可能會(huì)有類似的需要。

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

二、幾種常見的方法

2.1 被廢棄的 WakeLock

如果你看過(guò)比較早的 Android 教程類的書籍的話,在說(shuō)到保持屏幕常亮這個(gè)需求的時(shí)候,你應(yīng)該會(huì)想到 WakeLock??上绻悻F(xiàn)在還想只用 WakeLock 來(lái)限制屏幕常亮,你會(huì)發(fā)現(xiàn)已經(jīng)做不到了,不過(guò)作為一個(gè)教科書式的方法,雖然已經(jīng)被遺棄了,我們還是先來(lái)了解一下它。

WakeLock 使用起來(lái)也非常的簡(jiǎn)單。

從上面的例子可以看到,WakeLock 主要是通過(guò)一個(gè)系統(tǒng)服務(wù) PowerManager,然后通過(guò)調(diào)用它的 acquire() 方法獲取一個(gè) WakeLock 資源。

WakeLock 本身也是一種資源,在使用完成之后,別忘了調(diào)用 release() 方法進(jìn)行釋放。

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

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

前面使用 newWakeLock() 的時(shí)候,需要傳遞一個(gè) Flag,而和屏幕相關(guān)的三個(gè) Flag,在 Api Level 17+ 以上均已經(jīng)被標(biāo)識(shí)為 @Deprecated 了。

這三個(gè) Flag 分別是:

  • SCREEN_DIM_WAKE_LOCK:只限制屏幕,保證亮起,但是允許它亮度變低。
  • SCREEN_BRIGHT_WAKE_LOCK:保證屏幕***亮,但是鍵盤背光燈允許熄滅。
  • FULL_WAKE_LOCK:保證屏幕***亮度,并且鍵盤背光燈不允許熄滅。

當(dāng)然,有時(shí)候一些被標(biāo)記為 @Deprecated 的 Api,雖然不再推薦使用,但是依然是可用的。可惜 WakeLock 不在此列,它在高版本上真的被廢棄了,你再使用它去阻止息屏,你會(huì)發(fā)現(xiàn)真的沒有效果。

其實(shí)這也很好理解,PowerManager 本身就是一個(gè)系統(tǒng)資源,如果任由開發(fā)者去使用它,可能導(dǎo)致屏幕永遠(yuǎn)沒有機(jī)會(huì)息屏??善聊徽呛碾姶髴?,對(duì)于 Android 節(jié)能的思想,肯定是要被限制的。

既然 Google 已經(jīng)對(duì)它標(biāo)志位 @Deprecated ,并且實(shí)際上也不起作用了,我們就不要再使用它了。不過(guò)呢,Google 在廢棄這些 Api 的同時(shí),也提供了對(duì)應(yīng)的解決方案,那就是使用 FLAG_KEEP_SCREEN_ON,接下去了解它。

2、FLAG_KEEP_SCREEN_ON

WakeLock 的 FULL_WAKE_LOCK 在被標(biāo)記為廢棄的同時(shí),還提供了一個(gè)解決方案,那就是使用 FLAG_KEEP_SCREEN_ON 來(lái)控制屏幕常亮。

FLAG_KEEP_SCREEN_ON 使用起來(lái)也非常的簡(jiǎn)單,它是一個(gè)頁(yè)面 Window 對(duì)象上的一個(gè) Flag ,使用 addFlags() 方法就可以添加。

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

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

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

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

看看 FLAG_KEEP_SCREEN_ON 的文檔解釋。

  1. /**  
  2. *  Window flag: as long as this window is visible to the user, keep 
  3. *  the device's screen turned on and bright. 
  4. */ 
  5. public static final int FLAG_KEEP_SCREEN_ON     = 0x00000080; 

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

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

3、keepScreenOn

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

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

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

  1. /** 
  2. View flag indicating that the screen should remain on while the 
  3. * window containing this view is visible to the user.  This effectively 
  4. * takes care of automatically setting the WindowManager's 
  5. * {@link WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON}. 
  6. */ 
  7. public static final int KEEP_SCREEN_ON = 0x04000000; 

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

4、MediaPlayer的 setScreenOnWhilePlaying()

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

它的方法實(shí)現(xiàn)如下:

  1. /** 
  2.  * Control whether we should use the attached SurfaceHolder to keep the 
  3.  * screen on while video playback is occurring.  This is the preferred 
  4.  * method over {@link #setWakeMode} where possible, since it doesn't 
  5.  * require that the application have permission for low-level wake lock 
  6.  * access. 
  7.  * 
  8.  * @param screenOn Supply true to keep the screen onfalse to allow it 
  9.  * to turn off
  10.  */ 
  11. public void setScreenOnWhilePlaying(boolean screenOn) { 
  12.     if (mScreenOnWhilePlaying != screenOn) { 
  13.         if (screenOn && mSurfaceHolder == null) { 
  14.             Log.w(TAG, "setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder"); 
  15.         } 
  16.         mScreenOnWhilePlaying = screenOn; 
  17.         updateSurfaceScreenOn(); 
  18.     } 

之后通過(guò) updateSurfaceScreenOn() 方法來(lái)限制屏幕是否常亮。

  1. private void updateSurfaceScreenOn() { 
  2.     if (mSurfaceHolder != null) { 
  3.         mSurfaceHolder.setKeepScreenOn(mScreenOnWhilePlaying && mStayAwake); 
  4.     } 

它操作的是 SurfaceHolder 的 setKeepScreenOn() 方法,而另外一個(gè)條件 mStayAwake ,實(shí)際上就是當(dāng)前的播放狀態(tài),當(dāng)正在播放的時(shí)候,它就為 true,所以使用這種方式,只會(huì)在視頻播放的時(shí)候,保持屏幕常亮,正常來(lái)說(shuō)這也是我們對(duì)一般播放器的要求。

三、小結(jié)

看完本篇文章,你應(yīng)該知道當(dāng)你需要保持屏幕常亮的時(shí)候,你需要如何做了吧!

【本文為51CTO專欄作者“張旸”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2023-10-30 08:22:58

Android常亮Activity

2009-09-01 18:35:53

C#判斷文件存在

2023-09-12 08:02:13

viewport斷點(diǎn)

2018-07-19 06:14:09

2021-01-25 07:21:24

GitHub 開源代碼下載

2018-07-03 14:20:10

數(shù)據(jù)庫(kù)恢復(fù)備份

2024-12-13 08:25:59

DML操作SQL

2020-11-03 10:23:22

云計(jì)算容器技術(shù)

2024-07-22 08:03:55

2017-12-07 14:57:13

404互聯(lián)網(wǎng)錯(cuò)誤代碼

2017-12-26 08:25:57

硬盤數(shù)據(jù)丟失

2012-05-16 11:35:16

SQL Server拒絕訪問(wèn)

2019-12-31 09:11:01

后臺(tái)Android系統(tǒng)

2021-09-26 05:05:09

WindowWeb JS

2024-06-03 08:26:34

Android開發(fā)監(jiān)聽器

2009-09-18 12:29:55

2010-05-17 15:17:06

MySQL常用操作

2011-07-13 10:01:16

域控制器

2009-09-12 09:34:18

Windows 7中國(guó)售價(jià)

2015-10-20 10:30:59

創(chuàng)業(yè)時(shí)機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)