增加活动的屏幕亮度

3

显然,在Android操作系统中有至少三种不同的技术可以改变屏幕亮度。其中两种在Cupcake版本之后不再起作用,第三种被认为存在一个错误。

我想在一个单视图活动开始时增加屏幕亮度,然后在活动结束时将亮度恢复到用户设置的原始状态,没有按钮,没有第二个视图或第二个活动。只是在开始时最大化亮度,并在活动结束时返回到原始亮度设置。

我找到了使用WindowManager.LayoutParams的当前技术示例代码范围从2行

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 100 / 100.0f;
getWindow().setAttributes(lp);

需要查看数页源代码和众多活动。

有没有一个简单的例子,在启动时将屏幕亮度最大化,可以提供一个链接?

1个回答

4
你可以通过拖放操作或编写xml来创建SeekBar。
 SeekBar
     android:id="@+id/brightnesSseeker"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:max="255"
     android:progress="255" />

在MainActivity类中执行以下操作:
brightnesSseeker = (SeekBar) findViewById(R.id.brightnesSseeker);

    brightnesSseeker
            .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
                public void onStopTrackingTouch(SeekBar seekBar) {
                    // Nothing handled here
                }

                public void onStartTrackingTouch(SeekBar seekBar) {
                    // Nothing handled here
                }

                public void onProgressChanged(SeekBar seekBar,
                        int progress, boolean fromUser) {
                    // Set the minimal brightness level
                    // if seek bar is 20 or any value below
                    if (progress <= 20) {
                        // Set the brightness to 20
                        screenBrightness(20);
                    } else {
                        // Set brightness variable based on the progress bar
                        screenBrightness(progress);
                    }
                    stobeVariable=progress*10;
                }
            });

然后编写一个简单的函数:
private void screenBrightness(double newBrightnessValue) {
    /*
     * WindowManager.LayoutParams settings = getWindow().getAttributes();
     * settings.screenBrightness = newBrightnessValue;
     * getWindow().setAttributes(settings);
     */
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    float newBrightness = (float) newBrightnessValue;
    lp.screenBrightness = newBrightness / (float) 255;
    getWindow().setAttributes(lp);
}

在调用screenBrightness函数之前,请检查亮度模式,因为有时候选择了自动亮度模式,在这种情况下亮度不会改变。你还需要在清单文件中授予权限。

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

在设置 setOnSeekBarChangeListener 前,在 onCreate 中调用下面的函数。
  void changeBrightnessMode(){

    try {
        int brightnessMode = Settings.System.getInt(getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE);
        if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
            Settings.System.putInt(getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS_MODE,
                    Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
        }


    } catch (Exception e) {
        // do something useful

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接