Update Display Brightness on Android after changing it programmatically
I'm trying to update the display brightness from a widget but i have some problems.
To change brightness level, i use:
Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);
This modifies the display setting (in fact in Display->Brightness the level is corre开发者_StackOverflow社区ct) but the effective brightness of display is not changed. If i lock the screen and unlock, the brightness finally changes to the value i set.
I assume this is a Settings Update issue, so how can the display settings be immediatly updated after settings change?
I read that WindowManager.LayoutParams lp = getWindow().getAttributes();
should be used but I am working in a App Widget so getWindow() cannot be called.
I had a similar issue and just created an Activity with no UI to do the brightness change, used an intent to run it from the App Widget.
First, the value to modify in LayoutParams is screenBrightness. You'll then have to do a window.setAttributes to apply it. As GeekYouUp said, you can make a dummy activity to get your Window object.
Can you use this code in your 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);
This code fine works when you are setting phone screen brightness from inside a User-defined class which is not extending an Activity but you only need the context.
精彩评论