android 12 apk运行期间防止息屏
这段时间做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);
以上内容除去第一种方法自己没有去测试,其它的方法都是可以的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库