Я не могу перестать получать трансляции - PullRequest
0 голосов
/ 08 апреля 2019

Я не могу перестать получать трансляции. Почему?

Это код, который у меня есть:

public class MainActivity extends AppCompatActivity {

    BroadcastReceiver br = new CustomReceiver();
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BroadcastReceiver br = new CustomReceiver();
        filter.addAction(Intent.ACTION_POWER_CONNECTED);
        filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
        this.registerReceiver(br, filter);
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(!br.isOrderedBroadcast())
            this.registerReceiver(br, filter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(br.isOrderedBroadcast())
            this.unregisterReceiver(br);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(br.isOrderedBroadcast())
            this.unregisterReceiver(br);
    }

    @Override
    protected void onResume() {
        super.onResume();

        if(!br.isOrderedBroadcast())
            this.registerReceiver(br, filter);
    }

    @Override
    protected void onDestroy() {

        super.onDestroy();

        if(br.isOrderedBroadcast())
            this.unregisterReceiver(br);
    }
}

public class CustomReceiver extends BroadcastReceiver {

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

        String intentAction = intent.getAction();
        String toastMessage = "TOAST";

        switch (intentAction){
            case Intent.ACTION_POWER_CONNECTED:
                toastMessage="Power Connected!";
                break;
            case Intent.ACTION_POWER_DISCONNECTED:
                toastMessage="Power Disconnected!";
                break;
        }
        Toast.makeText(context, toastMessage, Toast.LENGTH_SHORT).show();
    }
}

Когда я перехожу к onPause() и onStop(), приложение продолжает показывать всплывающее сообщение о подключении и отключении заряда. Я не знаю почему.

1 Ответ

1 голос
/ 08 апреля 2019

Я предполагаю, что это условие (которое вы используете в onPause() и onStop()) br.isOrderedBroadcast() равно false, поэтому CustomReceiver не будет незарегистрированным.

Также, согласно документации, вы должны зарегистрироваться / отменить регистрацию CustomReceiver либо в onCreate() / onDestroy(), либо в onResume() / onPause().

...