Android app中可能存在某些可视化耗时操作,需要防止锁屏。
一、监听锁屏
添加权限
首先来看如何监听锁屏,使用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.参考文章