2 usniyo usniyo 于 2012.10.27 13:07 提问

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

5个回答

usniyo
usniyo   2013.01.17 11:50
已采纳

使用WindowManageraddView(View view, LayoutParams params)中添加一个透明的无内容的View并在params中设置屏幕亮度,在add完成之后用removeView(view)删除即可。详细请参考android桌面悬浮框的实现这部分知识。

huweilong1030
huweilong1030   2012.11.01 14:44
    //获取系统服务
    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);
}
huweilong1030
huweilong1030 那就不太清楚了,我用2.2的手机测试的,修改是成功的,不存在你说的那种情况
接近 5 年之前 回复
usniyo
usniyo 谢谢你的demo,是成功了,只是getWindow().setAttributes(lp);这个方法只能是当前Activity有效,saveBrightness之后,当退出这个Activity后,系统会重新检测配置文件里的亮度值并重新调节亮度。这就又回到了我的问题上了,我的问题的本质就在于在配置文件里更改并保存亮度值后,系统并没有即时检测并做出相应调整。我是在服务里操作的(业务需要),因此也没有getWindow()。
接近 5 年之前 回复
huweilong1030
huweilong1030 我的手机是2.2的系统,用这段代码调试成功了,写了一下小demo,你可以下载下来试试:http://download.csdn.net/detail/huweilong1030/4800545
接近 5 年之前 回复
usniyo
usniyo 真机,有root权限。
接近 5 年之前 回复
huweilong1030
huweilong1030 你是用什么测试的,模拟器 or 终端? 是否有root权限?
接近 5 年之前 回复
usniyo
usniyo 不好意思,到了今天我才有时间验证,可是这个方法才是和以前一样。并没有立即生效,您知道问题会出现在哪吗?
接近 5 年之前 回复
usniyo
usniyo 谢谢,我的问题应该就是少了resolver.notifyChange(uri, null);
接近 5 年之前 回复
hxn_217
hxn_217   2012.10.29 09:53

先设置:

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);
usniyo
usniyo 谢谢!但是我这个是在服务上操作的,用不了这个方法。
接近 5 年之前 回复
Sueyexin
Sueyexin   2012.11.26 09:51

应该是系统自动调节的原因,可以关闭自动调节试试

/**
 * 停止自动亮度调节
 */
public static void stopAutoBrightness(Activity activity) {
    Settings.System.putInt(activity.getContentResolver(),
            Settings.System.SCREEN_BRIGHTNESS_MODE,
            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
usniyo
usniyo 谢谢您的回答!就是因为关闭了自动调节才出现这样的问题的,在自动调节与手动调节之间切换时就不会出现这种情况了。
接近 5 年之前 回复
sasuke38
sasuke38   2012.12.05 17:40

不知道你想设置系统的亮度呢还是自己程序的亮度 如果只是设置自己程序的亮度的话

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1.0f;
getWindow().setAttributes(lp);

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

usniyo
usniyo 谢谢您的回答!但是我这个是在服务上操作的,用不了这个方法。
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片