40

我想在android中以编程方式更改屏幕亮度。目前我使用这段代码:

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

但是此示例代码适用于纸杯蛋糕,而不适用于最新版本。我正在使用最新版本的 SDK。对于较新的 Android 版本,首选的解决方案是什么?

4

6 回答 6

81

这可以通过使用:

WindowManager.LayoutParams layout = getWindow().getAttributes();
layout.screenBrightness = 1F;
getWindow().setAttributes(layout);

另请参阅:http: //developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

于 2010-10-05T11:38:48.820 回答
4

您必须Window在创建它之前添加参数,否则它会抛出java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

请参阅带有android.app.Dialog.Dialog.

final Dialog dialog = new Dialog(this) {
            @Override
            public void onAttachedToWindow() {
                super.onAttachedToWindow();
                WindowManager.LayoutParams layout = getWindow()
                        .getAttributes();
                layout.screenBrightness = 1F;
                getWindow().setAttributes(layout);
            }
        };
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialog.show();

请注意,亮度值介于 0.0F 和 1.0F 之间。

于 2015-03-17T04:22:26.207 回答
2

@kamal_tech_view:你必须转换值layout.screenBrightness = value; 浮动

于 2013-11-01T04:56:03.447 回答
1

为此使用 IHardwareService 接口怎么样?可以在本教程中找到一个示例。

更新:教程链接仍然有效,但下一个答案中也提供了实际代码。

于 2010-09-17T17:53:45.017 回答
1

回答太晚了,但想改进..

我尝试使用 Tor-morten 的代码,但它是针对特定屏幕本身的,我想在任何地方进行更改,我为此提供了服务。

在android中根据周围的光线改变亮度

希望,这对其他人有用。

于 2013-01-25T06:58:46.620 回答
0
final Dialog dialog = new Dialog(act);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog
                .setContentView(R.layout.menubase_brightness_control);
        dialog.setCanceledOnTouchOutside(true);

        SeekBar global_brightness_control = (SeekBar) dialog
                .findViewById(R.id.global_brightness_control);
        global_brightness_control.setMax(255);
        global_brightness_control.setProgress(Settings.System.getInt(
                con.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS));

        global_brightness_control
                .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                    public void onStopTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    public void onStartTrackingTouch(SeekBar seekBar) {
                        // TODO Auto-generated method stub

                    }

                    public void onProgressChanged(SeekBar seekBar,
                                                  int progress, boolean fromUser) {
                        Settings.System
                                .putInt(con.getContentResolver(),
                                        Settings.System.SCREEN_BRIGHTNESS, progress);
                    }
                });

        dialog.show();
于 2016-04-15T06:20:27.397 回答