Android app中可能存在某些可視化耗時操做,須要防止鎖屏。html
添加權限android
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> app
首先來看如何監聽鎖屏,使用BroadcastReceivercaset來監聽eclipse
1.鎖屏監聽ide
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工具ui
參考:Android屏幕保護KeyguardManager相關內容學習spa
//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(); }
此方法須要添加以下權限
<uses-permission android:name="android.permission.WAKE_LOCK" />
方法三,修改系統settings(不推薦,開啓後屏幕一直保持開啓,還得手動修改settings)
ContentResolver mContentResolver = getContentResolver(); android.provider.Settings.Secure.putInt(mContentResolver, android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);
//但注意要加權限AndroidManifest.xml文件中加入 ,所以,系統須要root才行
//<uses-permission android:name="android.permission.WRITE_SETTINGS" /> //還要特別注意的是要加入 android:sharedUserId="android.uid.system",但有一個問題, //若是加入了sharedUserId後就不能使用eclipse編譯了,必定要手動經過 mm -B進行編譯,而後把apk install到模擬器或設備中
在某些android高版本的View的中,有這樣的屬性(強烈推薦),能夠進行配置
android:keepScreenOn="true"
try doing it
3.參考文章
New UI-妙用view的keepScreenOn屬性保持屏幕常亮
Android屏幕保護KeyguardManager相關內容學習