【问题标题】:changing screen brightness programmatically in android在android中以编程方式更改屏幕亮度
【发布时间】:2011-04-13 20:21:01
【问题描述】:

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

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

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

【问题讨论】:

标签: android screen-brightness


【解决方案1】:
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();

【讨论】:

    【解决方案2】:

    您必须在创建之前将参数添加到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 之间。

    【讨论】:

      【解决方案3】:

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

      更新:教程链接仍然有效,但实际代码也可以在下一个答案中找到。

      【讨论】:

      • 哇,一个接受的答案 * 和 * 反对票。也许选民会愿意解释他为什么这样做?
      • 我认为他这样做是因为您的答案仅包含解决方案的链接。 Stackoverflow 旨在直接收集示例和解决方案,链接到源只是次要的。如果您的链接已失效,您的答案将完全失效。如果 android 接口发生变化并且您有一个示例说明和答案中的链接,我可以编辑您的答案以反映 api 更改。
      • 教程链接已经死了..找不到来源@tutorial。
      • DV,这不应该是公认的答案,示例代码应该在答案中。更不用说你在和隐藏的 API 说话了。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        答案为时已晚,但想改进..

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

        Change brightness according to surrounding light in android

        希望,对其他人有用。

        【讨论】:

          【解决方案6】:

          这可以通过使用:

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

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

          【讨论】:

          • 但是亮度值没有保存到下次设备从关机状态唤醒时... . ????
          • 浮动 prevBrightness = layout.screenBrightness;将获得当前的亮度。将此保存在 onSaveInstancedSaved() 或 sharedPreference 中
          • layout.screenBrightness = -1;或任何负值将屏幕亮度设置回原来的首选亮度。
          • 在最新的 android SDKs(似乎是 5.0)上,您需要在首次启动时配置权限请求对话框。否则它将无法在某些设备上运行,例如三星 s7,例如
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-31
          • 1970-01-01
          • 2011-06-29
          • 1970-01-01
          • 2011-11-30
          • 2012-08-31
          • 2012-02-14
          相关资源
          最近更新 更多