【发布时间】:2016-05-19 09:52:04
【问题描述】:
我想从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"));
}
我刚刚关注了那个很棒的post,但它只适用于Service 到Activity
我认为这与Fragment 中的Context 有关,也许getActivity() 不是正确的方式...
有什么想法吗? 谢谢。
【问题讨论】:
-
是的,你不能这样做,因为另一个
Activity在广播时不会处于活动状态。您必须使用其他方法来传递数据。 -
谢谢@MikeM。为您的回应。好的,但是如果在广播时 Activity 不活动,那么从 Service 发送广播时它是如何工作的? Activity 也没有激活,但它可以工作...您对如何在没有
LocalBroadcastManager的情况下实现它有什么建议吗? -
呃,不应该,除非我们不是在谈论同一件事,或者除非他们更新了最新版本的
LocalBroadcastManager以提供自己的粘性广播版本。无论如何,您可以使用某种形式的持久存储来保留数据,直到您启动另一个Activity,或者将其保存在您的Service中,直到另一个Activity需要它,或者使用提供粘性事件的事件总线,等等 -
好的,我将尝试您的建议之一,非常感谢您对我的帮助;)
标签: android android-fragments android-broadcastreceiver localbroadcastmanager