Android應用禁止屏幕休眠的3種方法

做android應用開發時,有時需要在應用前臺運行時,禁止休眠,以下幾種方法供參考。

方法一:持有wakelock

添加休眠鎖,休眠鎖必須成對出現。

private wakelock mwakelock = null;
 
private void acquirewakelock() {
  if(mwakelock == null) {
  
    powermanager pm = (powermanager)getsystemservice(context.power_service);
    
    mwakelock = pm.newwakelock(
      powermanager.partial_wake_lock | 
      powermanager.acquire_causes_wakeup, 
       this.getclass().getcanonicalname());
       
    mwakelock.acquire();
  }
 
}
 @override
 protected void onresume() {
   super.onresume();
   acquirewakelock();
 }

 @override
 protected void onpause() {
   super.onpause();
   releasewakelock();
 }

private void acquirewakelock(){
 if(mwakelock != null) {
 mwakelock.acquire();
 }
}
private void releasewakelock() {
  if(mwakelock != null) {
    mwakelock.release();
    ///mwakelock = null;
  }
}

onresume以及onpause執行相應操作

androidmanifest.xml 文件中添加權限:

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

wakelock獲取時相關的flag如下所示:

  • partial_wake_lock :保持cpu 運轉,屏幕和鍵盤燈有可能是關閉的。
  • screen_dim_wake_lock :保持cpu 運轉,允許保持屏幕顯示但有可能是灰的,允許關閉鍵盤燈
  • screen_bright_wake_lock :保持cpu 運轉,允許保持屏幕高亮顯示,允許關閉鍵盤燈
  • full_wake_lock :保持cpu 運轉,保持屏幕高亮顯示,鍵盤燈也保持亮度

ps:現在官方已經不推薦使用這種方式保持亮屏了,推薦改爲以下兩種方式

方法二:在window設置flag

在activity佈局中設置windows屬性進行控制,但是一定要在加載佈局之前執行,此種方法的侷限性是隻有在activity類中有效,activity退出時失效。

getwindow().setflags(windowmanager.layoutparams.flag_keep_screen_on, 
     windowmanager.layoutparams.flag_keep_screen_on); 
setcontentview(r.layout.***);  

//或者設置下面的也一樣        
//getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on);

這種方式不需要申請權限,也是官方推薦的做法

這個方法的好處是,與wakelocks不同 ,它不需要具體的權限,並且在換不同應用程序的操作中,系統會管理,不必擔心沒有釋放的未使用的資源。

你並不需要清除flag_keep_screen_on標誌,除非你不再需要在屏幕上停留在你運行應用程序。當應用程序進入後臺或返回到前臺發生,窗口管理器負責保障正常的事件處理,但是如果你明確的想要清除這個標緻,從而允許屏幕熄滅,可以使用 clearflags() 方法

如下:

getwindow().clearflags(windowmanager.layoutparams.flag_keep_screen_on)

就可以控制屏幕熄滅了

方法三:在界面佈局xml中頂層添加屬性

在view佈局中添加屬性,此種方法的好處是不一定非要在activity界面運行時屏幕常亮纔有效,view啓動後可以自主設置。

view的xml佈局中加入:

在xml文件中,使用android:keepscreenon屬性

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepscreenon="true">
 ...
</relativelayout>

這個設置 android:keepscreenon=“true” 等同於flag_keep_screen_on

代碼中執行是否保持屏幕常亮:

view.setkeepscreenon(true);
view.setkeepscreenon(false);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章