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

1

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

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

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() приложение продолжает показывать всплывающее сообщение о подключении и отключении заряда. Я не знаю почему.

Теги:
broadcastreceiver
android-lifecycle

1 ответ

1
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню