android,在设置亮度的时候,为什么没有立即生效?要关闭屏幕或自动变暗后,才生效。改变自动调节或手动调节模式时,倒是一小会儿后生效了。请问,如何解决?
public void setBrightness(int brightness)
{
// if (sysAutomaticMode)
// return;
Settings.System.putInt(context.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, brightness);
}
android原码使用了:
IPowerManager power = IPowerManager.Stub.asInterface(
ServiceManager.getService("power"));
if (power != null) {
power.setBacklightBrightness(brightness);
}
但是自己写的用不了IPowerManager啊。
使用WindowManager
的addView(View view, LayoutParams params)
中添加一个透明的无内容的View并在params中设置屏幕亮度,在add完成之后用removeView(view)
删除即可。详细请参考android桌面悬浮框的实现这部分知识。
先设置:
int curBrightnessValue = android.provider.Settings.System.getInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);
然后
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = curBrightnessValue/100.0f;
getWindow().setAttributes(layoutParams);
//获取系统服务
brightness = Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
/**
* 改变系统亮度的步骤,brighnessPro是亮度值
*/
ContentResolver resolver = getContentResolver();
setBrightnesss(brighnessPro);
seekBar.setProgress(brighnessPro);
seekBar.setEnabled(true);
saveBrightness(resolver, brighnessPro);
public void setBrightnesss(int brightness) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
if (brightness <= 1) {
return;
} else {
lp.screenBrightness = brightness / 255.0f; // 注意这个用法,下面会做分析
getWindow().setAttributes(lp);
}
}
public static void saveBrightness(ContentResolver resolver, int brightness) {
Uri uri = android.provider.Settings.System
.getUriFor("screen_brightness");
android.provider.Settings.System.putInt(resolver, "screen_brightness",
brightness);
resolver.notifyChange(uri, null);
}
应该是系统自动调节的原因,可以关闭自动调节试试
/**
* 停止自动亮度调节
*/
public static void stopAutoBrightness(Activity activity) {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
不知道你想设置系统的亮度呢还是自己程序的亮度 如果只是设置自己程序的亮度的话
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1.0f;
getWindow().setAttributes(lp);
试试以上这段代码 至于设置系统的亮度我就没做过了