Android app中可能存在某些可视化耗时操作,需要防止锁屏。
一、监听锁屏
添加权限
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
首先来看如何监听锁屏,使用BroadcastReceivercaset来监听
1.锁屏监听
public class ScreenBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "ScreenBroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(context.getClass().getSimpleName(), intent.getAction()); if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ // 解锁时 }else if(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)
ContentResolver mContentResolver = 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进行编译,然后把apk install到模拟器或设备中
方法四、配置keepScreenOn
在某些android高版本的View的中,有这样的属性(强烈推荐),可以进行配置
android:keepScreenOn="true"
try doing it
3.参考文章