BroadcastReceiver не получает широковещательную рассылку от IntentService

Я пытаюсь отправить трансляцию из IntentService в действие, которое его запустило, вот как я регистрирую Receiver в действии:

private BroadcastReceiver mInitializer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    mInitializer = new InitializationReceiver();
    IntentFilter initializer = new IntentFilter();
    initializer.addAction(IntentConstants.Tasks.INITIALIZE);
    initializer.addAction(IntentConstants.Initialization.INITIALIZE_IS_FIRST_START);
    initializer.addAction("test");
    registerReceiver(mInitializer, initializer);
    ....
}

private class InitializationReceiver extends BroadcastReceiver {
    private InitializationReceiver() {
        if(D) Log.d(TAG, "Instantiated InitializationReceiver");
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if(D) Log.d(TAG, "Received broadcast, intentAction: "+intent.getAction());
        if(intent.getAction().equals(IntentConstants.Tasks.INITIALIZE)) {
            if(D) Log.d(TAG, "Received Initialize Intent");
        }
        if(intent.getAction().equals(IntentConstants.Initialization.INITIALIZE_IS_FIRST_START)) {
            if(D) Log.d(TAG, "Received First Start Intent");
        }
    }
}

И вот как я отправляю трансляцию из IntentService:

if(D) Log.d(TAG, "Got here");
Intent testIntent = new Intent("test");
sendBroadcast(testIntent);
  • Служба создана, потому что "Попал сюда" регистрируется,
  • BroadcastReceiver инициализируется до создания службы и
  • активность видна при отправке трансляции.
  • трансляция не получена, потому что "Полученная трансляция..." никогда не регистрируется

Что может вызвать эту проблему?


person Luca Vitucci    schedule 22.08.2013    source источник


Ответы (1)


Вы должны register и unregister своих приемников в onResume() и в onPause() соответственно. Потому что, если вы зарегистрируете его только в onCreate() и отмените регистрацию в onPause(), то в следующий раз, когда действие будет выведено на передний план, onCreate() больше не будет вызываться, а затем снова не зарегистрирует получателя. Но onResume() всегда вызывается для отображаемой активности.

public void onResume() {
    super.onResume();
    ....
    registerReceiver(myBroadcastReceiver, intentFilter);
}

public void onPause() {
    super.onPause();
    ...
    unregisterReceiver(myBroadcastReceiver);
}
person Ritesh Gune    schedule 22.08.2013
comment
Вы были правы, вход в Facebook вызывал остановку активности, а затем в onStop я отменял регистрацию Receiver. после этого он больше не был зарегистрирован. - person Luca Vitucci; 22.08.2013