做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);
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。