如何在Android上检测屏幕亮度范围?

时间:2019-05-18 23:50:23

标签: android brightness screen-brightness

我正在使用以下代码设置屏幕亮度,该亮度在大多数手机上都可以正常运行:

    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不会将亮度设置为整个范围,如以下屏幕截图所示:

enter image description here

打印一些调试值并进行试验后,看起来在小米Mi8上,最大亮度值实际上是1024(或者至少乘以该值将设置整个亮度条)。

似乎不同的android设备可能具有不同的亮度等级。是否有一些API可以获取亮度的最大值,所以我不需要对不同的常数进行硬编码?

3 个答案:

答案 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设备上运行正常。