我正在使用以下代码设置屏幕亮度,该亮度在大多数手机上都可以正常运行:
protected fun setBrightness(value: Float) {
//Set the system brightness using the brightness variable value
Settings.System.putInt(contentResolver, Settings.System
.SCREEN_BRIGHTNESS, (value * 255).toInt())
//Get the current window attributes
val layoutpars = window.getAttributes()
//Set the brightness of this window
layoutpars.screenBrightness = value
//Apply attribute changes to this window
window.setAttributes(layoutpars)
}
当我传递值1(即最大值)时,该值将转换为255,这被认为是设置屏幕亮度的最大值。但是,在小米Mi8上,将值设置为255不会将亮度设置为整个范围,如以下屏幕截图所示:
打印一些调试值并进行试验后,看起来在小米Mi8上,最大亮度值实际上是1024(或者至少乘以该值将设置整个亮度条)。
似乎不同的android设备可能具有不同的亮度等级。是否有一些API可以获取亮度的最大值,所以我不需要对不同的常数进行硬编码?
答案 0 :(得分:2)
使用此方法获取亮度最大值
getMaximumScreenBrightnessSetting()
我已经在几个设备(大多数是android 9、10设备,包括一些小米设备,它们通常将亮度设置为比通常的255)上对此进行了测试,并且看起来像这样。
Google不鼓励使用反射来访问隐藏的字段/方法。任何android更新都可能会破坏该解决方案。
另一种可能的解决方案是使用反射来访问PowerManager类中的{{1}}方法。但是我没有测试过,因此无法确认结果。
NB :如果您使用此值设置亮度百分比,请记住:从android 9开始,亮度设置为logarithmically。因此,设置亮度百分比可能看起来不像亮度滑块中显示的百分比(较低的百分比可能看起来高于亮度滑块上的设置值),但是物理亮度将被正确设置。
答案 1 :(得分:1)
它特定于某些小米设备。例如,小米Redmi Note 7的范围为0-4000。
官方文档将SCREEN_BRIGHTNESS范围定义为0-255。因此,我认为没有API能够获得亮度的最大值。
答案 2 :(得分:1)
而不是将255设置为最大值。我更喜欢使用这种方式将亮度设置为最大。只需将1F传递到screenBrightness。
WindowManager.LayoutParams layout = getWindow().getAttributes();
layout.screenBrightness = 1F;
getWindow().setAttributes(layout);
在不同的android设备上运行正常。