14

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

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

我可以打开和关闭自动亮度,并设置不同的级别。设置似乎已正确应用-我可以进入设置->显示->亮度,并且我设置的设置实际上显示正确。然而,实际的屏幕并没有改变它的亮度。如果我只是点击显示设置中的滑块,那么一切都会被应用。

我应该提到我正在运行一个带有主要活动的应用程序,并且这些设置正在应用到 BroadcastReceiver。我确实尝试创建一个虚拟活动并在那里测试了这些东西,但得到了相同的结果。

4

4 回答 4

17

好的,在这里找到了答案: 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(),亮度将永远不会真正改变,因为必须在应用亮度设置之前创建布局。所以我最终创建了一个延迟 300 毫秒的线程,然后调用了 finish()。

于 2011-02-20T05:49:44.483 回答
2

使用上面“ 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);
于 2013-06-21T07:39:43.713 回答
2

我在我的一个应用程序中对屏幕亮度进行了类似的操作,并且通过 WindowManager 进行操作,并且可以正常工作。我正在使用以下代码获取当前屏幕亮度(并将其保存以备后用)并将其设置为全屏:

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    previousScreenBrightness = lp.screenBrightness;
    float brightness = 1;
    lp.screenBrightness = brightness; 
    getWindow().setAttributes(lp); 
于 2011-02-17T17:54:59.723 回答
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);
    }
}
于 2011-10-15T07:58:44.670 回答