Android广播接收器完成和打开活动

Android广播接收器完成和打开活动,android,Android,我在论坛中找到了一个代码,它允许我在设备屏幕关闭时关闭所有活动并打开另一个活动。我在SharedReference中存储了一个布尔值,如果为true,则必须启动BroadcastReceiver。问题是,即使布尔值为false,也会启动BroadcastReceiver public class Impostazioni extends AppCompatActivity { private BroadcastReceiver mReceiver = null; @Override pr

我在论坛中找到了一个代码,它允许我在设备屏幕关闭时关闭所有活动并打开另一个活动。我在SharedReference中存储了一个布尔值,如果为true,则必须启动BroadcastReceiver。问题是,即使布尔值为false,也会启动BroadcastReceiver

    public class Impostazioni extends AppCompatActivity {
private BroadcastReceiver mReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.impostazioni);

Switch swChiusura = (Switch) findViewById(R.id.switch1);
SharedPreferences settings_chiusura = getSharedPreferences(CHIUSURA_AUTOMATICA, Context.MODE_PRIVATE);
    boolean vero_falso = settings_chiusura.getBoolean("pref_chiusura_automatica", false);
    if(vero_falso){
        swChiusura.setChecked(true);
    }else{
        swChiusura.setChecked(false);
    }
swChiusura.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                SharedPreferences settings_percorso = getSharedPreferences(CHIUSURA_AUTOMATICA, Context.MODE_PRIVATE);
                SharedPreferences.Editor prefEditor = settings_percorso.edit();
                prefEditor.putBoolean("pref_chiusura_automatica", true);
                prefEditor.apply();
            }else{
                SharedPreferences settings_percorso = getSharedPreferences(CHIUSURA_AUTOMATICA, Context.MODE_PRIVATE);
                SharedPreferences.Editor prefEditor = settings_percorso.edit();
                prefEditor.putBoolean("pref_chiusura_automatica", false);
                prefEditor.apply();
                //disable reciver
                if (mReceiver != null) {
                    unregisterReceiver(mReceiver);
                    mReceiver = null;
                }
            }
        }
    });

 @Override
protected void onPause() {
    super.onPause();
     SharedPreferences settings_chiusura = getSharedPreferences(CHIUSURA_AUTOMATICA, Context.MODE_PRIVATE);
    boolean vero_falso = settings_chiusura.getBoolean("pref_chiusura_automatica", false);
    if (vero_falso) {
        /**
         * initialize receiver
         */
        final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mReceiver = new ScreenReceiver();
        registerReceiver(mReceiver, filter);

        // when the screen is about to turn off
        if (ScreenReceiver.wasScreenOn) {
            // this is the case when onPause() is called by the system due to a screen state change
            Log.e("MYAPP", "SCREEN TURNED OFF");
        }
    } else {
        if (mReceiver != null) {
            unregisterReceiver(mReceiver);
            mReceiver = null;
        }
    }
 }

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mReceiver != null) {
        unregisterReceiver(mReceiver);
        mReceiver = null;
    }
}
接受者

public class ScreenReceiver extends BroadcastReceiver {

public static boolean wasScreenOn = true;

@Override
public void onReceive(final Context context, Intent intent) {

    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        intent = new Intent(context, Login.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
        wasScreenOn = false;
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        wasScreenOn = true;
    }
}
}

这可能是一个糟糕的解决方案,但请尝试将SharedReferences布尔值放入ScreenReceiver的if块。因为你知道,当你的屏幕关闭时,它不需要布尔值就可以工作。我的意思是:

 if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
   if(sharedPref.getBoolean(yourBoolean)){ //...