无法在Android中以编程方式应用系统屏幕亮度

时间:2011-02-17 17:48:24

标签: android settings system brightness

我正在使用以下设置系统自动亮度模式和级别:

    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中应用。我确实尝试创建一个虚拟活动并测试那里的东西,但得到了相同的结果。

4 个答案:

答案 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);