无法在Android中以编程方式应用系统屏幕亮度

use*_*854 13 settings android system brightness

我正在使用以下设置系统自动亮度模式和级别:

    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
    android.provider.Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, y.brightness1);
Run Code Online (Sandbox Code Playgroud)

我可以打开和关闭自动brighess,并设置不同的级别.设置似乎正确应用 - 我可以进入设置 - >显示 - >亮度,并且无论何时设置我设置实际上是正确显示.但是,实际屏幕不会改变其亮度.如果我只是点击"显示设置"中的滑块,则会应用所有内容.

我提到我正在运行一个主要活动的应用程序,这些设置正在BroadcastReceiver中应用.我确实尝试创建一个虚拟活动并测试那里的东西,但得到了相同的结果.

use*_*854 16

好的,在这里找到答案: 从小部件刷新显示?

基本上,必须制作一个处理亮度变化的透明活动.帖子中没有提到的是你必须这样做:

Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, brightnessLevel); 
Run Code Online (Sandbox Code Playgroud)

然后做

WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp);
Run Code Online (Sandbox Code Playgroud)

如果在应用更改后立即调用finish(),亮度将永远不会实际更改,因为必须在应用亮度设置之前创建布局.所以我最终创建了一个300ms延迟的线程,然后调用finish().