Android 当我启动活动时,开关工作正常,但当活动进行反手时,开关仍会关闭?

Android 当我启动活动时,开关工作正常,但当活动进行反手时,开关仍会关闭?,android,uiswitch,Android,Uiswitch,我最近在制作屏幕调光器应用程序的项目中工作,但我遇到了一个问题。在我的应用程序中,有一个MaterialImagedSwitch它工作正常,但当应用程序转到反手时,该开关会自动关闭,但应用程序的工作会完全继续。我希望当用户返回应用程序界面时,该开关保持激活或打开状态。我使用MaterialImagedSwitch,因此如何执行此任务。 我希望在应用程序恢复时开关处于活动状态或打开状态 public class MainActivity extends AppCompatActivity { in

我最近在制作屏幕调光器应用程序的项目中工作,但我遇到了一个问题。在我的应用程序中,有一个MaterialImagedSwitch它工作正常,但当应用程序转到反手时,该开关会自动关闭,但应用程序的工作会完全继续。我希望当用户返回应用程序界面时,该开关保持激活或打开状态。我使用MaterialImagedSwitch,因此如何执行此任务。 我希望在应用程序恢复时开关处于活动状态或打开状态

public class MainActivity extends AppCompatActivity {
int b1 = 40;
int b2 = 90;
DiscreteSeekBar bSeekBar;
ChatHeadService binder=null;
boolean isOn = false;
boolean mBounded;
public boolean isRunning=false;
ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceDisconnected(ComponentName name) {
        mBounded = false;
        mService = null;
    }
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mBounded = true;
        LocalBinder mLocalBinder = (LocalBinder) service;
        mService = mLocalBinder.getServerInstance();
        int brightness = mService.getBrightness();
        int brightness2 = mService.getBrightness2();
       seekBar.setProgress(brightness);
        bSeekBar.setProgress(brightness2);
    }
};
ChatHeadService mService;
RadioGroup radioGroup;
DiscreteSeekBar seekBar;
MaterialAnimatedSwitch aSwitch;
SharedPreferences sharedPrefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Fabric.with(this, new Kit[]{new Crashlytics()});
    setContentView(R.layout.activity_main);
    initInstances();
    if (isOn && !isMyServiceRunning(ChatHeadService.class)) {
        startService(new Intent(this, ChatHeadService.class));
    }

}



 private boolean isMyServiceRunning(Class<?> serviceClass) {
    for (RunningServiceInfo service : ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

private void initInstances() {
    sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    seekBar = (DiscreteSeekBar) findViewById(R.id.seekBar);
    bSeekBar = (DiscreteSeekBar) findViewById(R.id.brightnessSeekBar);
    int b = sharedPrefs.getInt("b", 40);
    int bb = sharedPrefs.getInt("bb", 90);
    seekBar.setProgress(b);
    bSeekBar.setProgress(bb);
    aSwitch=(MaterialAnimatedSwitch)findViewById(R.id.switch1);
    aSwitch.setClickable(sharedPrefs.getBoolean("isOn",false));
    aSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(boolean b) {
            if(b){
                sharedPrefs.edit().putBoolean("isOn", true).apply();
                isOn = true;
                isRunning=aSwitch.isChecked();
                startService(new Intent(MainActivity.this, ChatHeadService.class));
                bindService();
            }
            else{
                sharedPrefs.edit().putBoolean("isOn", false).apply();
                isOn = false;
                unBindService();
                stopService(new Intent(MainActivity.this, ChatHeadService.class));                }
        }
    });
    seekBar.setOnProgressChangeListener(new OnProgressChangeListener() {

        public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
            b1 = value;
            if (mService != null) {
                mService.setBrightness(value, b2);
            }
            sharedPrefs.edit().putInt("b", value).apply();
        }

        public void onStartTrackingTouch(DiscreteSeekBar seekBar) {
        }

        public void onStopTrackingTouch(DiscreteSeekBar seekBar) {

        }
    });

    bSeekBar.setOnProgressChangeListener(new OnProgressChangeListener() {

        public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {
            b2 = value;
            if (mService != null) {
                mService.setBrightness(b1, value);
            }
            sharedPrefs.edit().putInt("bb", value).apply();
        }

        public void onStartTrackingTouch(DiscreteSeekBar seekBar) {
        }

        public void onStopTrackingTouch(DiscreteSeekBar seekBar) {

        }
    });

}
@Override
protected void onStart() {
    super.onStart();
    if (isOn) {
        bindService();
    }
}

public void bindService() {
    bindService(new Intent(this, ChatHeadService.class), mConnection,Context.BIND_AUTO_CREATE);
}

public void unBindService() {
    if (mBounded) {
        unbindService(mConnection);
        mBounded = false;
    }
}
@Override
protected void onPause() {
    super.onPause();
    isRunning=aSwitch.isPressed();
}

@Override
protected void onResume() {
    super.onResume();
    if(!isOn == aSwitch.isPressed()){
        aSwitch.toggle();
    }
}
public类MainActivity扩展了AppCompatActivity{
int b1=40;
int b2=90;
离散seekbar-bSeekBar;
ChatHeadService绑定器=null;
布尔值=假;
布尔mBounded;
公共布尔值isRunning=false;
ServiceConnection mConnection=新的ServiceConnection(){
ServiceDisconnected上的公共无效(组件名称){
mBounded=假;
mService=null;
}
@凌驾
服务连接上的公共无效(组件名称,IBinder服务){
mBounded=真;
LocalBinder mLocalBinder=(LocalBinder)服务;
mService=mLocalBinder.getServerInstance();
int-brightness=mService.getBrightness();
int-brightness2=mService.getBrightness2();
seekBar.setProgress(亮度);
b seekbar.setProgress(亮度2);
}
};
聊天室服务mService;
放射组放射组;
离散seekBar-seekBar;
材料驱动开关作为开关;
SharedReferences SharedRefers;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Fabric.with(这是一个新的工具包[]{new Crashlytics()});
setContentView(R.layout.activity_main);
initInstances();
if(isOn&!isMyServiceRunning(ChatHeadService.class)){
startService(新意图(this,ChatHeadService.class));
}
}
专用布尔值isMyServiceRunning(类serviceClass){
对于(RunningServiceInfo服务:((ActivityManager)getSystemService(Context.ACTIVITY_服务)).getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}
私有void initInstances(){
SharedPrefers=PreferenceManager.getDefaultSharedPreferences(此);
seekBar=(离散seekBar)findViewById(R.id.seekBar);
b seekbar=(离散seekbar)findViewById(R.id.brightnessSeekBar);
intb=sharedPrefs.getInt(“b”,40);
intbb=sharedPrefs.getInt(“bb”,90);
seekBar.setProgress(b);
b seekbar.setProgress(bb);
aSwitch=(MaterialInitiatedSwitch)findViewById(R.id.switch1);
aSwitch.setClickable(sharedPrefs.getBoolean(“isOn”,false));
setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共void(布尔b){
如果(b){
sharedPrefs.edit().putBoolean(“isOn”,true).apply();
isOn=真;
isRunning=aSwitch.isChecked();
startService(新意图(MainActivity.this、ChatHeadService.class));
bindService();
}
否则{
sharedPrefs.edit().putBoolean(“isOn”,false).apply();
isOn=假;
解除绑定服务();
stopService(新意图(MainActivity.this,ChatHeadService.class));}
}
});
seekBar.setOnProgressChangeListener(新的OnProgressChangeListener(){
public void onProgressChanged(离散seekBar seekBar、int值、布尔fromUser){
b1=数值;
if(mService!=null){
M服务正确性(值b2);
}
sharedPrefs.edit().putInt(“b”,值).apply();
}
开始跟踪触摸时的公共无效(离散seekBar seekBar){
}
TopTrackingTouch上的公共无效(离散seekBar-seekBar){
}
});
bSeekBar.setOnProgressChangeListener(新的OnProgressChangeListener(){
public void onProgressChanged(离散seekBar seekBar、int值、布尔fromUser){
b2=数值;
if(mService!=null){
M服务正确性(b1,值);
}
sharedPrefs.edit().putInt(“bb”,值).apply();
}
开始跟踪触摸时的公共无效(离散seekBar seekBar){
}
TopTrackingTouch上的公共无效(离散seekBar-seekBar){
}
});
}
@凌驾
受保护的void onStart(){
super.onStart();
国际单项体育联合会{
bindService();
}
}
公共服务(){
bindService(新意图(this,ChatHeadService.class),mConnection,Context.BIND\u AUTO\u CREATE);
}
公共无效解除绑定服务(){
如果(mBounded){
解除绑定服务(mConnection);
mBounded=假;
}
}
@凌驾
受保护的void onPause(){
super.onPause();
isRunning=aSwitch.isPressed();
}
@凌驾
受保护的void onResume(){
super.onResume();
如果(!isOn==aSwitch.isPressed()){
aSwitch.toggle();
}
}
}

提前谢谢


我建议将开关的值存储在一个全局变量中,并在恢复时再次使用开关进行设置,如下所示:

public boolean isRunning = false;

    @Override
    protected void onPause() {
        super.onPause();
        isRunning = switchAler.isChecked();
    }

    @Override
    protected void onResume() {
        super.onResume();
        binding.switchAler.setChecked(isRunning);
        if(!isRunning == switchAler.isChecked()){
            switchAler.toggle();
        }
    }

您正在共享首选项中保存开关状态,但未使用它

只需在
aswitch.setOnCheckedChangeListener上方添加以下行即可
行,它将应用您在首选项中保存的状态

aSwitch.setChecked(sharedPrefs.getBoolean("isOn", false)); //false default 
当我使用setChecked(isRunning)存储MaterialImagedSwitch的状态时,会出现一个错误,表示未解析的符号setChecked和isChecked()未应用于保存状态。请提出一些解决方法。我认为isChecked()对MaterialImagedSwitch不起作用,此代码也不起作用,我认为setClickable()方法是否工作,我正在应用,但仍然不工作。setChecked()不工作。它会给出错误,表示未解析的符号。我希望