Android LocalBroadcastManager из фрагмента в действие не получает сообщение

Я хочу отправить сообщение от Fragment к Activity (не от Fragment родителя Activity, а просто от другого).

На самом деле я делаю то же самое с Service на тот же Activity, и это прекрасно работает.

Это мой код:

Fragment:

private void sendBroadcastMessage() {
    Intent intent = new Intent("my_event");
    // add data
    intent.putExtra("message", "test");
    LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
}

Activity:

private BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Extract data included in the Intent
        String message = intent.getStringExtra("message");

    }
};

@Override
protected void onPause() {
    // Unregister since the activity is not visible 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();    LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, new IntentFilter("my_event"));
}

Я только что просмотрел этот замечательный пост, но он работает только с Service по Activity

Я думаю, что это как-то связано с Context из Fragment, возможно, getActivity() не совсем правильный путь...

Любые идеи? Спасибо.


comment
Да, вы не можете этого сделать, потому что другой Activity не будет активен во время трансляции. Вам придется использовать какой-то другой метод для передачи ваших данных.   -  person Mike M.    schedule 19.05.2016
comment
Спасибо @MikeM. за ваш ответ. Хорошо, но если Активность не активна во время трансляции, как она работает, когда трансляция отправляется из Сервиса? Активность тоже не активна, но работает... есть ли у вас какие-либо предложения о том, как реализовать это без LocalBroadcastManager ?   -  person Ale    schedule 19.05.2016
comment
Эээ, не должно, если только мы не говорим об одном и том же, или если они не обновили новейшую версию LocalBroadcastManager, чтобы предложить собственную версию прикрепляемых трансляций. Во всяком случае, вы можете использовать некоторую форму постоянного хранилища для хранения данных до тех пор, пока вы не запустите другой Activity, или хранить их в своем Service до тех пор, пока они не потребуются другому Activity, или использовать шину событий, которая предлагает фиксированные события и т. д.   -  person Mike M.    schedule 19.05.2016
comment
Хорошо, я собираюсь попробовать одно из ваших предложений, большое спасибо, вы мне очень помогли;)   -  person Ale    schedule 19.05.2016


Ответы (1)


Зарегистрируйте трансляцию в onCreate и отмените регистрацию в onDestroy своей активности.

В вашем случае это может быть отмена регистрации в onPause. поэтому отмените регистрацию в onDestroy вместо onPause.

Спасибо,

person Rajat Sharma    schedule 19.05.2016