安卓系统中的屏幕亮度值

8
你如何获取当前Activity的屏幕亮度?
以下方法可以通过调用setBrightness(100)来将屏幕亮度设为最大值:
private void setBrightness(int brightness) {
    WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
    layoutParams.screenBrightness = brightness/100.0f;
    getWindow().setAttributes(layoutParams);
}

我想实现以下功能:

  1. 启动活动并 保存当前亮度值
  2. 将亮度设置为最大值
  3. 在某些事件上将亮度重置为初始值

非常感谢!


在设置之前,layoutParams.screenBrightness的值是多少? - ZelluX
4个回答

17

尝试一下

int curBrightnessValue = android.provider.Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);

然后

   WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
    layoutParams.screenBrightness = curBrightnessValue/100.0f;
    getWindow().setAttributes(layoutParams);

1
非常感谢Michele!通过将赋值语句放在try/catch块中,它完美地运行了。 - lukuluku
@Michele:为什么第一行会运行?我写了"int curBrightnessValue = ...",但它不起作用。顺便问一下,亮度需要权限吗? - Omid Nazifi
@Michele 谢谢,是的我编辑了你的语句并且它运行正常。"final int level = Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS,-1); " - Omid Nazifi
使用此代码时要小心,因为在某些设备上设置layoutParams.screenBrightness = 0会导致屏幕关闭,只能通过硬重置重新打开。当我将screenBrightness = 0.01F设置为0时,我没有遇到任何问题。 - Tim Cooke

6

0

有不同的亮度值: 1)如果您已经为活动亮度设置了某些内容,则可以获取此值。如果未设置,则为-1F 2)亮度的系统值 获取示例:

    val activityBrightness = requireActivity().window.attributes.screenBrightness
    val systemBrightness = Settings.System.getInt(requireActivity().contentResolver, Settings.System.SCREEN_BRIGHTNESS) / 255
    currentBrightness = if (activityBrightness == -1F) systemBrightness.toFloat() * 100 else activityBrightness * 100

设置活动窗口亮度的示例代码(请注意,值可以从0.0到1.0):

    currentBrightness = if (currentBrightness < 0) 0.0F else if (currentBrightness > 100) 100.0F else currentBrightness
    val layoutParams = activity?.window?.attributes
    if (layoutParams != null) {
        layoutParams.screenBrightness = currentBrightness / 100
        requireActivity().window.attributes = layoutParams
    }

你在发布代码之前会测试吗?"activityBrightness"的值始终为-1,而"systemBrightness"的值始终为0。 - Kishan Solanki

0

我在Android 17+上使用它(可能也适用于较低的API)

    private void setScreenBrightnessTo(float brightness) {
        WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes();
        if (lp.screenBrightness == brightness) {
            return;
        }

        lp.screenBrightness = brightness;
        getActivity().getWindow().setAttributes(lp);
    }

用途:

将屏幕设置为最大亮度(例如在显示条形码或其他内容时):

setScreenBrightnessTo(BRIGHTNESS_OVERRIDE_FULL);

重置回用户之前的亮度设置:

setScreenBrightnessTo(BRIGHTNESS_OVERRIDE_NONE);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接