以编程方式更改自适应亮度级别

Change adaptive brightness level programmatically

如何在 Android Lollipop 上以编程方式更改自适应亮度级别?

我知道如何更改手册 brightness level,以及如何打开或关闭 adaptive brightness。它是这样做的: Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, newLevel);

但是,启用 adaptive brightness 后,OS 将其与另一个 brightness level 结合,这与手动的不同。

有办法吗?

Target/min/max SDK 为 21.

不知道为什么 Android API 中有一个隐藏常量 SCREEN_AUTO_BRIGHTNESS_ADJ 来调整自适应亮度。但是您可以像我一样传递 "screen_auto_brightness_adj" 字符串值。

自适应亮度调整存储为 [-1;1] 范围内的浮点值。如果您使用 [0;255] 范围内的亮度值,您可以将其转换为适当的值,如下所示。

float value = (((float)brightness*2)/255) - 1.0f;
Settings.System.putFloat(contentResolver, "screen_auto_brightness_adj", value);

如果您的应用 targetSdkVersion 是 23+,Settings.System.putFloat(contentResolver, "screen_auto_brightness_adj", value) 将不起作用,因为 Android 禁止您修改任何 "hidden" 设置.

阅读frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider。java warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk() 了解详情。