转
转自:http://blog.csdn.net/chenyafei617/article/details/6575621
Introduction
常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏 功能启动,既不想锁频,然而系统却在我们看电视或者视频的时候出来个锁屏的界面进行锁频拉,我们还要想继续看的话还要去解锁,这样好麻烦,不是我们想要 的,那我们该怎么做呢,其实很简单,我这里只讲其中的两种
一:我们只要在程序中用代码实现。代码如下:
//方法一getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);setContentView(R.layout.main);//方法二@OverrideprotectedvoidonResume(){super.onResume();pManager=((PowerManager)getSystemService(POWER_SERVICE));mWakeLock=pManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,TAG);mWakeLock.acquire();}@OverrideprotectedvoidonPause(){super.onPause();if(null!=mWakeLock){mWakeLock.release();}}//方法三publicvoidunLock(){mContentResolver=getContentResolver();//不建议使用//setLockPatternEnabled(Android.provider.Settings.System.LOCK_PATTERN_ENABLED,false);//推荐使用setLockPatternEnabled(android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);}privatevoidsetLockPatternEnabled(StringsystemSettingKey,booleanenabled){//不建议使用//android.provider.Settings.System.putInt(mContentResolver,systemSettingKey,enabled?1:0);//推荐使用android.provider.Settings.Secure.putInt(mContentResolver,systemSettingKey,enabled?1:0);}//但注意要加权限AndroidManifest.xml文件中加入////还要特别注意的是要加入android:sharedUserId="android.uid.system",但有一个问题,//如果加入了sharedUserId后就不能使用eclipse编译了,一定要手动通过mm-B进行编译,然后把apkinstall到模拟器或设备中
二:禁用系统的锁频功能,这方法不建议使用,只有在设当的环境下适当使用既可,我们只要知道这样我们也可以达到这样的功能实现就OK。
我们知道Android系统的锁屏时间存放在Setting数据库中,字段为Settings.System.SCREEN_OFF_TIMEOUT。我们可以查看SettingsProvider源码,查看如下文件的源码如下:
~/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java查看loadSystemSettings()函数的代码如下
privatevoidloadSystemSettings(SQLiteDatabasedb){SQLiteStatementstmt=db.compileStatement("INSERTORIGNOREINTOsystem(name,value)"+"VALUES(?,?);");Resourcesr=mContext.getResources();loadBooleanSetting(stmt,Settings.System.DIM_SCREEN,R.bool.def_dim_screen);loadSetting(stmt,Settings.System.STAY_ON_WHILE_PLUGGED_IN,"1".equals(SystemProperties.get("ro.kernel.qemu"))?1:0);loadIntegerSetting(stmt,Settings.System.SCREEN_OFF_TIMEOUT,R.integer.def_screen_off_timeout);//SetdefaultcdmaemergencytoneloadSetting(stmt,Settings.System.EMERGENCY_TONE,0);//SetdefaultcdmacallautoretryloadSetting(stmt,Settings.System.CALL_AUTO_RETRY,0);//SetdefaultcdmaDTMFtypeloadSetting(stmt,Settings.System.DTMF_TONE_TYPE_WHEN_DIALING,0);//SetdefaulthearingaidloadSetting(stmt,Settings.System.HEARING_AID,0);//SetdefaultttymodeloadSetting(stmt,Settings.System.TTY_MODE,0);loadBooleanSetting(stmt,Settings.System.AIRPLANE_MODE_ON,R.bool.def_airplane_mode_on);loadStringSetting(stmt,Settings.System.AIRPLANE_MODE_RADIOS,R.string.def_airplane_mode_radios);loadStringSetting(stmt,Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,R.string.airplane_mode_toggleable_radios);loadBooleanSetting(stmt,Settings.System.AUTO_TIME,R.bool.def_auto_time);//SynctimetoNITZloadIntegerSetting(stmt,Settings.System.SCREEN_BRIGHTNESS,R.integer.def_screen_brightness);loadBooleanSetting(stmt,Settings.System.SCREEN_BRIGHTNESS_MODE,R.bool.def_screen_brightness_automatic_mode);loadDefaultAnimationSettings(stmt);loadBooleanSetting(stmt,Settings.System.ACCELEROMETER_ROTATION,R.bool.def_accelerometer_rotation);loadDefaultHapticSettings(stmt);stmt.close();}
我们通过查看源码便知道,Settings.System.SCREEN_OFF_TIMEOUT