我正在使用以下设置系统自动亮度模式和级别:
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);
我可以打开和关闭自动brighess,并设置不同的级别。设置似乎正确应用 - 我可以进入设置 - >显示 - >亮度,并且无论何时我设置的设置实际上都是正确显示的。但是,实际屏幕不会改变其亮度。如果我只是点击“显示设置”中的滑块,则会应用所有内容。
我提到我正在运行一个主要活动的应用程序,这些设置正在BroadcastReceiver中应用。我确实尝试创建一个虚拟活动并测试那里的东西,但得到了相同的结果。
答案 0 :(得分:16)
好的,在这里找到答案: Refreshing the display from a widget?
基本上,必须制作一个处理亮度变化的透明活动。帖子中没有提到的是你必须这样做:
Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
Settings.System.putInt(y.getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, brightnessLevel);
然后做
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness;
getWindow().setAttributes(lp);
如果在应用更改后立即调用finish(),亮度将永远不会实际更改,因为必须在应用亮度设置之前创建布局。所以我最终创建了一个300ms延迟的线程,然后调用finish()。
答案 1 :(得分:2)
我在我的一个应用程序中做了类似于屏幕亮度的事情,我正在通过WindowManager进行它并且它可以工作。我正在使用以下代码获取当前屏幕亮度(并保存以供日后使用)并将其设置为完整:
WindowManager.LayoutParams lp = getWindow().getAttributes();
previousScreenBrightness = lp.screenBrightness;
float brightness = 1;
lp.screenBrightness = brightness;
getWindow().setAttributes(lp);
答案 2 :(得分:1)
我在我的Application类中创建了一个静态方法,我从所有的Activity.onResume()方法调用它。
MyApplication extends Application {
...
public static void setBrightness(final Activity context) {
// get the content resolver
final ContentResolver cResolver = context.getContentResolver();
// get the current window
final Window window = context.getWindow();
try {
// get the current system brightness
int brightnessLevel = System.getInt(cResolver,System.SCREEN_BRIGHTNESS);
// get the current window attributes
LayoutParams layoutpars = window.getAttributes();
// set the brightness of this window
layoutpars.screenBrightness = brightnessLevel / (float) 255;
// apply attribute changes to this window
window.setAttributes(layoutpars);
} catch (SettingNotFoundException e) {
// throw an error cuz System.SCREEN_BRIGHTNESS couldn't be retrieved
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
}
}
MyActivity extends Activity {
...
public void onResume() {
super.onResume();
Log.d(TAG, "onResume()");
MyApplication.setBrightness(this);
}
}
答案 3 :(得分:1)
使用" user496854"上述
如果您正在执行max screenBrightness = 255,那么在执行
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness; getWindow().setAttributes(lp);
将screenBrightness除以255
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = brightness/(float)255;
getWindow().setAttributes(lp);