以编程方式更改后,在Android上更新显示亮度

时间:2010-12-06 12:12:50

标签: android screen-brightness

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

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

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

这会修改显示设置(实际上在显示 - >亮度级别正确)但显示的有效亮度不会改变。如果我锁定屏幕并解锁,亮度最终会变为我设定的值。

我认为这是一个设置更新问题,那么在设置更改后如何立即更新显示设置?

我读到应该使用WindowManager.LayoutParams lp = getWindow().getAttributes();,但我在App Widget中工作,因此无法调用getWindow()。

3 个答案:

答案 0 :(得分:6)

我有一个类似的问题,只是创建了一个没有UI的Activity来进行亮度变化,使用了一个意图从App Widget运行它。

答案 1 :(得分:1)

首先,要在LayoutParams中修改的值为screenBrightness。然后,您必须执行window.setAttributes才能应用它。正如GeekYouUp所说,你可以做一个虚拟活动来获取你的Window对象。

答案 2 :(得分: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);

当您从 未扩展活动 的用户定义类中设置手机屏幕亮度时,此代码可以正常工作,但您只需要上下文。