android,在设置亮度的时候,为什么没有立即生效?

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啊。

使用WindowManageraddView(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);

试试以上这段代码 至于设置系统的亮度我就没做过了