Android app中可能存在某些可视化耗时操作,需要防止锁屏。
一、监听锁屏
添加权限
首先来看如何监听锁屏,使用BroadcastReceivercaset来监听
1.锁屏监听
publicclassScreenBroadcastReceiverextendsBroadcastReceiver{
privatestaticfinalStringTAG="ScreenBroadcastReceiver";
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Log.i(context.getClass().getSimpleName(),intent.getAction());
if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){//解锁时
}elseif(Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){//锁屏时
}
}
}
从上得知,注册锁屏状态监听广播需要2个Action,
Intent.ACTION_USER_PRESENT和Intent.ACTION_SCREEN_OFF.
二、阻止锁屏
方法一,修改window的flag
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
方式二,使用SDK 电源管理器PowerManger与KeyguardManager工具
//onResume 中启用
wakeLock = ((PowerManager) getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE, TAG);
wakeLock.acquire();
//onPause 中禁用
if (wakeLock != null) {
wakeLock.release();
}
此方法需要添加如下权限
方法三,修改系统settings(不推荐,开启后屏幕一直保持开启,还得手动修改settings)
ContentResolvermContentResolver=getContentResolver();
android.provider.Settings.Secure.putInt(mContentResolver,android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);
//但注意要加权限AndroidManifest.xml文件中加入,因此,系统需要root才行
//
//还要特别注意的是要加入android:sharedUserId="android.uid.system",但有一个问题,
//如果加入了sharedUserId后就不能使用eclipse编译了,一定要手动通过mm-B进行编译,然后把apkinstall到模拟器或设备中
方法四、配置keepScreenOn
在某些android高版本的View的中,有这样的属性(强烈推荐),可以进行配置
android:keepScreenOn="true"
try doing it
3.参考文章
如果觉得《android 监听锁屏 权限 Android中监听锁屏变化和防止锁屏》对你有帮助,请点赞、收藏,并留下你的观点哦!