【问题标题】:How to keep the brightness setting after the activity finish?活动结束后如何保持亮度设置?
【发布时间】:2012-09-30 15:00:47
【问题描述】:

我正在尝试制作一个可以改变屏幕亮度的滑块。我已经设法用上面的代码做到了

亮度代码:

BackLightControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub
            float BackLightValue = (float)progress/100.0f;
            int brightnessMode;
            try {
                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);
            }
              BackLightSetting.setText(String.valueOf(BackLightValue));
              WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
              layoutParams.screenBrightness = BackLightValue;
              getWindow().setAttributes(layoutParams);
            } catch (SettingNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
        }           

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

        }

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

        }
    });


}

}

问题是它正在工作,我可以在滑动滑块时看到亮度变化,但是一旦活动结束,它就会恢复到之前的亮度级别,这是没有意义的。使用滑块时禁用的自动背光设置仍然存在。 我做错了什么? 另外,如何防止滑块为0,因为屏幕熄灭,只有强制关闭应用程序才能重置更改。

【问题讨论】:

    标签: android seekbar brightness


    【解决方案1】:

    为防止滑块为 0,如果结果为 0,只需在语句中加 1:

    float BackLightValue = (float)progress/100.0f;
    if(BackLightValue == 0){
       BackLightValue++
    }
    

    要保存亮度,请使用以下代码并尝试将您的活动中的完成语句延迟几百毫秒。出于某种原因,这通常可以解决问题。

    System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness);
    

    只需将此行添加到您想要更改亮度的位置。第三个参数“亮度”应替换为搜索栏中的值。在您的情况下,BackLightValue。请记住,亮度值的范围是 1 到 255。


    您可能需要通过此 hack 刷新屏幕:

    • 开始活动并立即完成

    设置亮度后开始此活动:

    context.startActivity(new Intent(context, Bright.class));
    

    虚拟活动可能是:

    public class Bright extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    finish();
      }
    }
    

    【讨论】:

    • 谢谢,0 问题已解决。我猜那是最容易的。为了节省亮度,我真的不明白该放在哪里(我对android编程的经验很少)。
    • 我无法让它工作。我想 System.putInt.... 保存滑块位置的值。但它
    【解决方案2】:

    要防止滑块的值为 0,您可以使用类似于此的版本: Prevent SeekBar from moving past a dynamic point,但将其修改为使用 min 的静态值,例如:

    //We want a minimum om 20 percent screen brightness
    private static int MY_MIN_VALUE = 20;
    
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (progress > MY_MIN_VALUE){
            seekBar.setProgress(progress);
            saveScreenBrightness(progreess);
        }
    
        else
            seekBar.setProgress(MY_MIN_VALUE);     
    }
    

    其中saveScreenBrightness()方法是更新亮度的方法。

    要将亮度保存到系统,请尝试使用以下代码:

    System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, brightness);
    

    我还没有测试过这个方法,但它应该可以工作。您也可以尝试阅读这篇文章:Changing screen brightness programmatically (as with the power widget)

    【讨论】:

    • 也感谢您快速而有价值的回答。我已经从您的链接中阅读了该主题,以及我发现的其他一些相关内容,但我没有设法解决它。为此,我已经启动了这个线程。
    【解决方案3】:

    为防止亮度为 0 值(您希望亮度为 1-255): seekBar.setMax(254); //0-254

    //然后 od 使用进度 (0-254),始终使用 ++progress (1-255)

    //设置seekBar进度时使用--brightness

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2023-03-28
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多