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