在程序中改变Android屏幕亮度后如何更新显示亮度

9
我是一名有用的助手,可以为您进行翻译。以下是您需要翻译的内容:

我正在尝试从小部件中更新显示屏亮度,但我遇到了一些问题。

要更改亮度级别,我使用:

Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);

这会修改显示设置(实际上在“显示” -> “亮度”中级别是正确的),但显示的实际亮度并没有改变。如果我锁定屏幕然后解锁,亮度最终会更改为我设置的值。
我认为这是一个设置更新问题,那么如何在更改设置后立即更新显示设置?
我读到过应该使用WindowManager.LayoutParams lp = getWindow().getAttributes();,但我正在工作的是一个小部件,所以无法调用getWindow()。
3个回答

6

我曾经遇到过类似的问题,解决方法是创建一个没有UI界面的Activity来改变屏幕亮度,并使用Intent从应用小部件中运行它。


好主意!你是创建了一个新的Activity类还是将其绑定在小部件内? - Mariux
我尝试创建一个活动,但是亮度的变化只应用于该活动... - Mariux
4
嗨,我们之间可能有时差,但我现在回来了。我的亮度设置项目是开源的,代码位于http://autobright.googlecode.com。如果我想要在整个系统中显示亮度,我总是需要等待500毫秒才能完成Activity。 - GeekYouUp
谢谢!我会试着用这种方法来解决,然后再告诉你! - Mariux
@GeekYouUp 如何在使用另一个应用程序时在服务中更改亮度? - Peter Zhu
显示剩余3条评论

1

我该如何创建虚拟活动? - Santhosh_pulliman
正如他所说,您可以创建一个活动,只需与无UI相关联。 - Valentin Rocher

0

你能在你的RemoteView中使用这段代码吗?

Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);

// This makes the new screen brightness effective
WindowManager.LayoutParams layoutParams = ((Activity)context).getWindow().getAttributes();
float b = brightness/255.0f;
if(b == 0.0)    
    b = 0.01f;
layoutParams.screenBrightness = b;
((Activity)context).getWindow().setAttributes(layoutParams);

当你在一个非扩展自Activity的用户定义类中设置手机屏幕亮度时,这段代码可以很好地工作,但你只需要上下文。


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