歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 禁止屏幕休眠和鎖屏的方法

Android 禁止屏幕休眠和鎖屏的方法

日期:2017/3/1 11:12:08   编辑:Linux編程

Introduction

常常我們開發程序的時候我們不需要系統喚醒系統鎖屏功能,比如我們在做xxxNowTV或XXX播放器這樣的程序,用戶有時候在看電視或視頻的時候不希望系統的鎖屏功能啟動,既不想鎖頻,然而系統卻在我們看電視或者視頻的時候出來個鎖屏的界面進行鎖頻拉,我們還要想繼續看的話還要去解鎖,這樣好麻煩,不是我們想要的,那我們該怎麼做呢,其實很簡單,我這裡只講其中的兩種

一 :我們只要在程序中用代碼實現。代碼如下:

  1. //方法一
  2. getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main);
  3. //方法二
  4. @Override
  5. protected void onResume() {
  6. super.onResume();
  7. pManager = ((PowerManager) getSystemService(POWER_SERVICE));
  8. mWakeLock = pManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
  9. | PowerManager.ON_AFTER_RELEASE, TAG);
  10. mWakeLock.acquire();
  11. }
  12. @Override
  13. protected void onPause() {
  14. super.onPause();
  15. if(null != mWakeLock){
  16. mWakeLock.release();
  17. }
  18. }
  19. //方法三
  20. public void unLock(){
  21. mContentResolver = getContentResolver();
  22. //不建議使用
  23. //setLockPatternEnabled(Android.provider.Settings.System.LOCK_PATTERN_ENABLED,false);
  24. //推薦使用
  25. setLockPatternEnabled(android.provider.Settings.Secure.LOCK_PATTERN_ENABLED,false);
  26. }
  27. private void setLockPatternEnabled(String systemSettingKey, boolean enabled) {
  28. //不建議使用
  29. //android.provider.Settings.System.putInt(mContentResolver,systemSettingKey, enabled ? 1 : 0);
  30. //推薦使用
  31. android.provider.Settings.Secure.putInt(mContentResolver, systemSettingKey,enabled ? 1 : 0);
  32. }
  33. //但注意要加權限AndroidManifest.xml文件中加入
  34. //<uses-permission android:name="android.permission.WRITE_SETTINGS" />
  35. //還要特別注意的是要加入 android:sharedUserId="android.uid.system",但有一個問題,
  36. //如果加入了sharedUserId後就不能使用eclipse編譯了,一定要手動通過 mm -B進行編譯,然後把apk install到模擬器或設備中

二:禁用系統的鎖頻功能,這方法不建議使用,只有在設當的環境下適當使用既可,我們只要知道這樣我們也可以達到這樣的功能實現就OK。

我們知道Android系統的鎖屏時間存放在Setting數據庫中,字段為Settings.System.SCREEN_OFF_TIMEOUT。我們可以查看SettingsProvider源碼,查看如下文件的源碼如下:

~/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 查看loadSystemSettings()函數的代碼如下

  1. private void loadSystemSettings(SQLiteDatabase db) {
  2. SQLiteStatement stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
  3. + " VALUES(?,?);");
  4. Resources r = mContext.getResources();
  5. loadBooleanSetting(stmt, Settings.System.DIM_SCREEN,
  6. R.bool.def_dim_screen);
  7. loadSetting(stmt, Settings.System.STAY_ON_WHILE_PLUGGED_IN,
  8. "1".equals(SystemProperties.get("ro.kernel.qemu")) ? 1 : 0);
  9. loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
  10. R.integer.def_screen_off_timeout);
  11. // Set default cdma emergency tone
  12. loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
  13. // Set default cdma call auto retry
  14. loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
  15. // Set default cdma DTMF type
  16. loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
  17. // Set default hearing aid
  18. loadSetting(stmt, Settings.System.HEARING_AID, 0);
  19. // Set default tty mode
  20. loadSetting(stmt, Settings.System.TTY_MODE, 0);
  21. loadBooleanSetting(stmt, Settings.System.AIRPLANE_MODE_ON,
  22. R.bool.def_airplane_mode_on);
  23. loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_RADIOS,
  24. R.string.def_airplane_mode_radios);
  25. loadStringSetting(stmt, Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
  26. R.string.airplane_mode_toggleable_radios);
  27. loadBooleanSetting(stmt, Settings.System.AUTO_TIME,
  28. R.bool.def_auto_time); // Sync time to NITZ
  29. loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS,
  30. R.integer.def_screen_brightness);
  31. loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,
  32. R.bool.def_screen_brightness_automatic_mode);
  33. loadDefaultAnimationSettings(stmt);
  34. loadBooleanSetting(stmt, Settings.System.ACCELEROMETER_ROTATION,
  35. R.bool.def_accelerometer_rotation);
  36. loadDefaultHapticSettings(stmt);
  37. stmt.close();
  38. }

我們通過查看源碼便知道, Settings.System.SCREEN_OFF_TIMEOUT沒有初始化的話(系統首次啟動,這個字段肯定是沒有初始化

Copyright © Linux教程網 All Rights Reserved