android设置屏幕禁止休眠的方法

来源:互联网 发布:flash cs3 mac 编辑:程序博客网 时间:2024/05/01 08:52
实现这一功能的方法有两种,一种是在Manifest.xml文件里面声明,一种是在代码里面修改LayoutParams的标志位。具体如下:
 1、在Manifest.xml文件里面用user-permission声明。代码如下:
 <uses-permission android:name=”android.permission.WAKE_LOCK”>
 </uses-permission>
   这种方法,在安装apk时,系统会提示安装人是否允许使用禁止休眠功能。
 2、在程序中用代码实现。代码如下:
 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
   把这段代码加在setContentView(R.layout.main)之前即可
   这种方法,安装时,不会提示安装人是否允许使用禁止休眠功能


在正常情况下,Android系统会让程序和服务进入休眠状态以节约电量使用。然而在开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠。 

Android中设置禁止休眠有两种方式: 

1. 在View中设置FLAG_KEEP_SCREEN_ON。 

实现上可以在代码中设置,也可以在XML文件中设置。 

代码如下所示: 

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

或者配置文件对该View设置: 

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:keepScreenOn="true" 
android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> 

这样可以保持当前View所在的Activity一直在活动状态运行,而且屏幕是高亮的。非常耗电!! 

2.通过PowerManager来精细控制。 

首先在Manifest.xml文件里面用user-permission声明 

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

之后通过PowerManager服务来获取电量控制锁: 

  private void acquireWakeLock() {       
  if (wakeLock == null) {         
   PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);     
   wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName());
   wakeLock.acquire();     
   }   
  } 

关键代码在newWakeLock的第一个参数,可以有: 



Flag Value CPU Screen Keyboard 
PARTIAL_WAKE_LOCK On* Off Off 
SCREEN_DIM_WAKE_LOCK On Dim Off 
SCREEN_BRIGHT_WAKE_LOCK On Bright Off 
FULL_WAKE_LOCK On Bright Bright 



*PARTIAL_WAKE_LOCK参数和其他不同,如果选择了这个参数,那即时用户按了关机键,CPU仍保持运行;而其他参数在用户按了关机键之后,CPU即停止运行,如果不按关机键,系统在过一段时间休眠后,CPU仍保持运行。 

在程序退出时,必须释放WakeLock: 

private void releaseWakeLock() {     
  if (wakeLock != null && wakeLock.isHeld()) {      
   wakeLock.release();      
   wakeLock = null;   
   } 


这两个方法分别在OnCreate/OnDestroy或者OnResume/OnPause中调用。 
1 0