假设现在有三组摄像头,当打开app然后勾选第一个复选框时就是打开第一组摄像头,而取消勾选第一个复选框就是关闭第一组摄像头,其它两组也分别对应剩下的两组复选框;如果我退出app并杀死后台或者直接关机,那么下一次重新打开app时如何保存第一次打开app时复选框以及摄像头的开启或者关闭状态呢?
想要解决问题首先要了解复选框的基本特性,至于保存复选框的状态可以使用安卓中的一个轻量级的存储辅助类SharedPreference来实现。
package com.example.demo10;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
private CheckBox checkBox_one, checkBox_two, checkBox_three;
private EditText editText;
private final static String TAG = "Sung Mochi";
private final static String PREFS_NAME = "myPreferences";
private final static String KEY_CHECKBOX1_STATE = "checkbox1_state";
private final static String KEY_CHECKBOX2_STATE = "checkbox2_state";
private final static String KEY_CHECKBOX3_STATE = "checkbox3_state";
private boolean isChecked1;
private boolean isChecked2;
private boolean isChecked3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkBox_one = findViewById(R.id.checkbox1);
checkBox_two = findViewById(R.id.checkbox2);
checkBox_three = findViewById(R.id.checkbox3);
editText = findViewById(R.id.edit_text);
LoadCheckBoxState(); //恢复上一次的状态
//点击保存复选框状态,例如:如果勾选复选框就保存勾选复选框的状态,取消勾选就保存取消勾选复选框的状态。
checkBox_one.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton CheckBox, boolean isChecked) {
if (isChecked){
SavefristCheckState();
Toast.makeText(MainActivity.this, "保存第一个CheckBox点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第一个CheckBox点击的状态");
}else {
SavefristCheckState();
Toast.makeText(MainActivity.this, "保存第一个CheckBox取消点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第一个CheckBox取消点击的状态");
}
}
});
checkBox_two.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton CheckBox, boolean isChecked) {
if (isChecked){
SaveSecondCheckState();
Toast.makeText(MainActivity.this, "保存第二个CheckBox点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第二个CheckBox点击的状态");
}
else {
SaveSecondCheckState();
Toast.makeText(MainActivity.this, "保存第二个CheckBox取消点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第二个CheckBox取消点击的状态");
}
}
});
checkBox_three.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton CheckBox, boolean isChecked) {
if (isChecked){
SaveThirdCheckState();
Toast.makeText(MainActivity.this, "保存第三个CheckBox点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第三个CheckBox点击的状态");
}else{
SaveThirdCheckState();
Toast.makeText(MainActivity.this, "保存第三个CheckBox取消点击的状态", Toast.LENGTH_SHORT).show();
Log.i(TAG,"保存第三个CheckBox取消点击的状态");
}
}
});
if (isChecked1){
Log.i(TAG,"a组开启第一次测试");
Log.i(TAG,"a组开启第二组测试");
Log.i(TAG,"a组开启第三次测试");
}else{
Log.i(TAG,"a组关闭第一次测试");
Log.i(TAG,"a组关闭第二次测试");
Log.i(TAG,"a组关闭第三次测试");
}
if (isChecked2){
Log.i(TAG,"b组开启第一次测试");
Log.i(TAG,"b组开启第二次测试");
Log.i(TAG,"b组开启第三次测试");
}
else {
Log.i(TAG,"b组关闭第一次测试");
Log.i(TAG,"b组关闭第二次测试");
Log.i(TAG,"b组关闭第三次测试");
}
if(isChecked3){
Log.i(TAG,"c组开启第一次测试");
Log.i(TAG,"c组开启第二次测试");
Log.i(TAG,"c组开启第三次测试");
} else {
Log.i(TAG,"c组关闭第一次测试");
Log.i(TAG,"c组关闭第二次测试");
Log.i(TAG,"c组关闭第三次测试");
}
// TimerTask task=new TimerTask() {
// @Override
// public void run() {
//
// }
// };
// Timer timer=new Timer();
// timer.schedule(task,5000);
}
private void LoadCheckBoxState(){
//从SharePreferences中恢复复选框状态
SharedPreferences sharedPreferences=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
isChecked1=sharedPreferences.getBoolean(KEY_CHECKBOX1_STATE,false);
isChecked2=sharedPreferences.getBoolean(KEY_CHECKBOX2_STATE,false);
isChecked3=sharedPreferences.getBoolean(KEY_CHECKBOX3_STATE,false);
//设置复选框为之前保存的状态
checkBox_one.setChecked(isChecked1);
checkBox_two.setChecked(isChecked2);
checkBox_three.setChecked(isChecked3);
}
private void SavefristCheckState(){
//使用SharedPreference保存复选框状态
SharedPreferences sharedPreferences=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
boolean isChecked1=checkBox_one.isChecked();
editor.putBoolean(KEY_CHECKBOX1_STATE,isChecked1);
editor.apply();
}
private void SaveSecondCheckState(){
SharedPreferences sharedPreferences=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
boolean isChecked2=checkBox_two.isChecked();
editor.putBoolean(KEY_CHECKBOX2_STATE,isChecked2);
editor.apply();
}
private void SaveThirdCheckState(){
SharedPreferences sharedPreferences=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
SharedPreferences .Editor editor=sharedPreferences.edit();
boolean isCheck3=checkBox_three.isChecked();
editor.putBoolean(KEY_CHECKBOX3_STATE,isCheck3);
editor.apply();
}
}
最后我这里面只是用一些日志打印来测试一些这个demo,这也是我进企业实习第一次公司给我安排的一个简单任务来增加公司某个测试apk的功能,所以其中不足之处肯定会有的