【问题标题】:Android LocalBroadcastManager from Fragment to Activity not receiving message从 Fragment 到 Activity 的 Android LocalBroadcastManager 未收到消息
【发布时间】:2016-05-19 09:52:04
【问题描述】:

我想从FragmentActivity 发送消息(不是FragmentActivity,只是另一个)。

实际上,我从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"));
}

我刚刚关注了那个很棒的post,但它只适用于ServiceActivity

我认为这与Fragment 中的Context 有关,也许getActivity() 不是正确的方式...

有什么想法吗? 谢谢。

【问题讨论】:

  • 是的,你不能这样做,因为另一个Activity 在广播时不会处于活动状态。您必须使用其他方法来传递数据。
  • 谢谢@MikeM。为您的回应。好的,但是如果在广播时 Activity 不活动,那么从 Service 发送广播时它是如何工作的? Activity 也没有激活,但它可以工作...您对如何在没有LocalBroadcastManager 的情况下实现它有什么建议吗?
  • 呃,不应该,除非我们不是在谈论同一件事,或者除非他们更新了最新版本的LocalBroadcastManager 以提供自己的粘性广播版本。无论如何,您可以使用某种形式的持久存储来保留数据,直到您启动另一个 Activity,或者将其保存在您的 Service 中,直到另一个 Activity 需要它,或者使用提供粘性事件的事件总线,等等
  • 好的,我将尝试您的建议之一,非常感谢您对我的帮助;)

标签: android android-fragments android-broadcastreceiver localbroadcastmanager


【解决方案1】:

在活动的 onCreate 中注册广播并在 onDestroy 中取消注册。

在您的情况下,它可能在 onPause 中取消注册。所以在 onDestroy 而不是 onPause 中取消注册。

谢谢,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多