安卓支持將屏幕亮度設爲0的方法。

前言,本文通過修改framework代碼實現,單純在app上是無法做到的,此外本文修改的是安卓9.0源碼。

1、安卓app中通過代碼修改屏幕亮度的方法。

/**
 * app中設置亮度函數
 * 設置當前系統的亮度值:0~255
 * 雖然參數可以爲0,但是實際上屏幕還是有一定亮度,實際會設置爲10,這個值對應的具體配置文件位置:
 * frameworks\base\core\res\res\values\config.xml中config_screenBrightnessSettingMinimum值
 * 雖然把這個值設爲0可以將亮度設爲0,但是系統設置中的亮度調節也可以調到0,這不是我們想要的結果。
 * 我們只是單純的想通過代碼設置亮度爲0
 */
public void setSysScreenBrightness(int brightness, Context context) {
	try {
		ContentResolver resolver = context.getContentResolver();
		Uri uri = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
		Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
		resolver.notifyChange(uri, null); // 實時通知改變
	} catch (Exception e) {
		Log.e("xxx", "設置當前系統的亮度值失敗:" + e.getMessage(), e);
	}
}

2、實現只能通過代碼修改屏幕亮度爲0,而不影響系統設置中屏幕亮度的最小值方法。

爲了不影響系統亮度設置,我們不去修改frameworks\base\core\res\res\values\config.xml中config_screenBrightnessSettingMinimum參數值。而是修改frameworks\base\services\core\java\com\android\server\display\DisplayPowerController.java的構造函數。
    DisplayPowerController(),如下修改,可設置最小亮度爲0

   將如下語句
  

 final int screenBrightnessSettingMinimum = clampAbsoluteBrightness(resources.getInteger(
                com.android.internal.R.integer.config_screenBrightnessSettingMinimum));


    改成
    

// add by zzh for set birghtness as 0 if power save is close @{
final int screenBrightnessSettingMinimum = 0;
// @}


    這樣就能使Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, 0);生效,且不影響系統設置中的亮度設置最小值。

3、通過app設置屏幕亮度爲0後,若直接重啓系統,則開機後屏幕亮度也是0,及屏幕全黑,導致無法操作,解決方法。

private void updatePowerStateLocked() {
		// add by zzh @{
		// system param, if true, then use default screen timeout way, or only set brightness as 0
		boolean needSleep = SystemProperties.getBoolean("persist.sys.powersave.open", true);
		if (!needSleep && mDirty == 288) {
			// mDirty == 288 only boot system can fit
			// if has set brightness as 0 before reboot, 
			// we will reset brightness to non zero bright, or screen is black after boot
			int lastBrighness = SystemProperties.getInt("persist.sys.last.brightness", 10);
			setSysScreenBrightness(lastBrighness, mContext);
		}
		// @}
		// .....
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章