android 12 apk运行期间防止息屏

发布时间 2023-05-09 16:45:23作者: 是小杰哦

这段时间做android 应用开发需要软件运行期间,禁止休眠的需求,在网上查找了一些资料并且自己尝试之后也确实有效果,在这边自己记录一下,以防止需要的时候另外去找。

一、持有WakeLock

  添加休眠锁,休眠锁的话必须要成对的出现。并且需要在AndroidMainfest.xml文件中添加权限,官方并不推荐使用这种方式亮屏,所以不过多得去说了直接亮代码就好。

 .class类中:

 1 private WakeLock mWakeLock = null;
 2   
 3 private void acquireWakeLock() {
 4   if(mWakeLock == null) {
 5    
 6     PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
 7      
 8     mWakeLock = pm.newWakeLock(
 9       PowerManager.PARTIAL_WAKE_LOCK | 
10       PowerManager.ACQUIRE_CAUSES_WAKEUP, 
11        this.getClass().getCanonicalName());
12         
13     mWakeLock.acquire();
14   }
15   
16 }
17  @Override
18  protected void onResume() {
19    super.onResume();
20    acquireWakeLock();
21  }
22  
23  @Override
24  protected void onPause() {
25    super.onPause();
26    releaseWakeLock();
27  }
28  
29 private void acquireWakeLock(){
30  if(mWakeLock != null) {
31  mWakeLock.acquire();
32  }
33 }
34 private void releaseWakeLock() {
35   if(mWakeLock != null) {
36     mWakeLock.release();
37     ///mWakeLock = null;
38   }
39 }

 在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 运转,保持屏幕高亮显示,键盘灯也保持亮度

二、在Window设置flag

  在Activity布局中设置Window属性进行控制,但是一定要在加载布局之前执行,这个方法也同样的有局限性,只有在Activity类中有效,退出了Activity就会失效。优点在于不需要申请权限,也不需要考虑没有释放未使用的资源,代码如下:


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在Activity布局中设置Windows属性进行控制,但是一定要在加载布局之前执行,
// 此种方法的局限性是只有在Activity类中有效,Activity退出时失效。
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//或者设置下面的也一样 //getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

三、在界面布局xml中顶层添加属性

  在View布局中添加属性,这个方法的好处是不一定非要在Activity界面运行时屏幕常亮才有效果,View启动之后可以根据需要自主设置。

<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);

以上内容除去第一种方法自己没有去测试,其它的方法都是可以的。