安卓支持将屏幕亮度设为0的方法。

前言,本文通过修改framework代码实现,单纯在app上是无法做到的,此外本文修改的是安卓9.0源码。

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

可能需要的权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>

设置屏幕亮度: 

/**
 * 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 @{
final int screenBrightnessSettingMinimum = 0;
// @}


    这样就能使Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, 0);生效,且不影响系统设置中的亮度设置最小值。

3、通过app设置屏幕亮度为0后,若直接重启系统,则开机后屏幕亮度也是0,即屏幕全黑,导致无法操作,解决方法。

\frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java中

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);
                        // reset to default brightness
			if (lastBrighness <= 0)
				lastBrighness = 102;
			setSysScreenBrightness(lastBrighness, mContext);
		}
		// @}
		// .....
}

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页