活动结束后如何保持亮度设置?

时间:2012-09-30 15:00:47

标签: android seekbar brightness

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

亮度代码:

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,因为屏幕熄灭,只有强制关闭应用程序我才能重置更改。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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


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

  • 开始活动并立即完成

设置亮度后开始此活动:

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

虚拟活动可能是:

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

finish();
  }
}

答案 1 :(得分:1)

要防止滑块的值为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)

答案 2 :(得分:0)

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

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

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