Java 如何使用SeekBar以编程方式调整设备亮度?
我的设置应用程序中有两个seekbar,一个用于声音,一个用于亮度。我的sound seekbar会按照我的要求更改媒体音量,并且在其他活动和应用程序中会保持更改,但在我更改活动后,亮度seekbar不会保持更改,它只会更改“设置”页面中的亮度。我希望实现的是,即使在其他活动和应用程序中,它们也能保持我在“应用程序设置”页面中设置的状态 ApplicationSettings.javaJava 如何使用SeekBar以编程方式调整设备亮度?,java,android,android-settings,screen-brightness,Java,Android,Android Settings,Screen Brightness,我的设置应用程序中有两个seekbar,一个用于声音,一个用于亮度。我的sound seekbar会按照我的要求更改媒体音量,并且在其他活动和应用程序中会保持更改,但在我更改活动后,亮度seekbar不会保持更改,它只会更改“设置”页面中的亮度。我希望实现的是,即使在其他活动和应用程序中,它们也能保持我在“应用程序设置”页面中设置的状态 ApplicationSettings.java public class ApplicationSettings extends AppCompatActiv
public class ApplicationSettings extends AppCompatActivity {
private SeekBar VolumeSeekbar = null;
private SeekBar BrightnessSeekbar = null;
private AudioManager audioManager = null;
private float BackLightValue;
//Seek bar object
private SeekBar seekBar;
//Variable to store brightness value
private int brightness;
//Content resolver used as a handle to the system's settings
private ContentResolver cResolver;
//Window object, that will store a reference to the current window
private Window window;
TextView txtPerc;
@Override
public void onCreate(Bundle savedInstanceState) {
setVolumeControlStream(AudioManager.STREAM_MUSIC);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application_settings);
//Instantiate seekbar object
seekBar = (SeekBar) findViewById(R.id.BrightBar);
txtPerc = (TextView) findViewById(R.id.txtPercentage);
//Get the content resolver
cResolver = getContentResolver();
//Get the current window
window = getWindow();
VolumeControl();
BrightnessControl();
}
public void GoToMainScreenButton1 (View view) {
Intent intentStart = new Intent(this, MainScreen.class);
startActivity(intentStart);
}
private void VolumeControl() {
try {
VolumeSeekbar = (SeekBar) findViewById(R.id.SoundBar);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
VolumeSeekbar.setMax(audioManager
.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
VolumeSeekbar.setProgress(audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC));
VolumeSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
progress, 0);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
private void BrightnessControl() {
//Set the seekbar range between 0 and 255
//seek bar settings//
//sets the range between 0 and 255
seekBar = (SeekBar) findViewById(R.id.BrightBar);
seekBar.setMax(255);
//set the seek bar progress to 1
seekBar.setKeyProgressIncrement(1);
try
{
//Get the current system brightness
brightness = Settings.System.getInt(cResolver, Settings.System.SCREEN_BRIGHTNESS);
}
catch (Settings.SettingNotFoundException e)
{
//Throw an error case it couldn't be retrieved
Log.e("Error", "Cannot access system brightness");
e.printStackTrace();
}
//Set the progress of the seek bar based on the system's brightness
seekBar.setProgress(brightness);
//Register OnSeekBarChangeListener, so it can actually change values
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
public void onStopTrackingTouch(SeekBar seekBar)
{
//Set the system brightness using the brightness variable value
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
//Get the current window attributes
WindowManager.LayoutParams layoutpars = window.getAttributes();
//Set the brightness of this window
layoutpars.screenBrightness = brightness / (float)255;
//Apply attribute changes to this window
window.setAttributes(layoutpars);
}
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
brightness=20;
}
else //brightness is greater than 20
{
//Set brightness variable based on the progress bar
brightness = progress;
}
//Calculate the brightness percentage
float perc = (brightness /(float)255)*100;
//Set the brightness percentage
txtPerc.setText((int)perc +" %");
}
});
}
}
公共类应用程序设置扩展了AppCompatActivity{
私有SeekBar VolumeSeekbar=null;
私有SeekBar亮度SeekBar=null;
专用AudioManager AudioManager=null;
私有价值;
//搜索条对象
私人SeekBar SeekBar;
//用于存储亮度值的变量
亮度;
//用作系统设置句柄的内容解析程序
私有内容解析程序cResolver;
//窗口对象,该对象将存储对当前窗口的引用
私人窗口;
TextView-txtPerc;
@凌驾
创建时的公共void(Bundle savedInstanceState){
setVolumeControlStream(AudioManager.STREAM_MUSIC);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u application\u设置);
//实例化seekbar对象
seekBar=(seekBar)findViewById(R.id.BrightBar);
txtPerc=(TextView)findViewById(R.id.txtPercentage);
//获取内容解析器
cResolver=getContentResolver();
//获取当前窗口
window=getWindow();
体积控制();
亮度控制();
}
公共无效GoToMainScreenButton1(视图){
Intent intentStart=newintent(这是MainScreen.class);
startActivity(意向启动);
}
私有void VolumeControl(){
试一试{
VolumeSeekbar=(SeekBar)findViewById(R.id.SoundBar);
audioManager=(audioManager)getSystemService(Context.AUDIO\u服务);
VolumeSeekbar.setMax(音频管理器
.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
VolumeSeekbar.setProgress(audioManager
.getStreamVolume(AudioManager.STREAM_MUSIC));
VolumeSeekbar.setOnSeekBarChangeListener(新的SeekBar.OnSeekBarChangeListener(){
@凌驾
TopTrackingTouch上的公共无效(请参见kbar arg0){
}
@凌驾
开始跟踪触摸时的公共无效(请参见kbar arg0){
}
@凌驾
public void onProgressChanged(参见kbar arg0、int progress、布尔arg2){
audioManager.setStreamVolume(audioManager.STREAM_MUSIC,
进展,0);
}
});
}捕获(例外e){
e、 printStackTrace();
}
}
专用控件(){
//将seekbar范围设置为0到255之间
//搜索栏设置//
//将范围设置为0到255之间
seekBar=(seekBar)findViewById(R.id.BrightBar);
seekBar.setMax(255);
//将搜索栏进度设置为1
seekBar.setKeyProgressIncrement(1);
尝试
{
//获取当前系统亮度
亮度=Settings.System.getInt(cResolver,Settings.System.SCREEN\u亮度);
}
catch(Settings.SettingNotFoundException)
{
//抛出无法检索的错误案例
Log.e(“错误”,“无法访问系统亮度”);
e、 printStackTrace();
}
//根据系统亮度设置搜索栏的进度
seekBar.setProgress(亮度);
//在seekbarchaneglistener上注册,以便它可以实际更改值
seekBar.setOnSeekbarchaneListener(新的seekBar.onSeekbarchaneListener()
{
TopTrackingTouch(SeekBar SeekBar)上的公共无效
{
//使用亮度变量值设置系统亮度
Settings.System.putInt(cResolver,Settings.System.SCREEN\u亮度,亮度);
//获取当前窗口属性
WindowManager.LayoutParams layoutpars=window.getAttributes();
//设置此窗口的亮度
layoutpars.screenBrightness=亮度/(浮动)255;
//将属性更改应用于此窗口
设置属性(layoutpars);
}
开始跟踪触摸时的公共无效(SeekBar SeekBar)
{
//这里什么都没处理
}
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser)
{
//设置最小亮度级别
//如果搜索栏为20或以下任何值
如果(进展)
您正在处理自动亮度模式吗
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
你也有清单许可吗
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
PS:我想对这些问题发表意见,但还不能发表意见。对不起。您正在处理自动亮度模式吗
Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
你也有清单许可吗
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>
PS:我想评论这些问题,但还不能评论。抱歉。我的清单中已经有写入设置,我现在将检查手动模式,干杯。写入设置已经在我的清单中,我现在将检查手动模式,干杯。