我正在尝试制作一个可以改变屏幕亮度的滑块。我已设法使用上面的代码
亮度代码:
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,因为屏幕熄灭,只有强制关闭应用程序我才能重置更改。
答案 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