Android LocalBroadcastManager从片段到活动未接收消息
我想从Android LocalBroadcastManager从片段到活动未接收消息,android,android-fragments,android-broadcastreceiver,localbroadcastmanager,Android,Android Fragments,Android Broadcastreceiver,Localbroadcastmanager,我想从片段向活动发送消息(不是片段父活动,而是另一个) 实际上,我从一个服务到同一个活动都做了同样的事情,效果非常好 这是我的代码: 片段: private void sendBroadcastMessage() { Intent intent = new Intent("my_event"); // add data intent.putExtra("message", "test"); LocalBroadcastManager.getInstance(get
片段
向活动
发送消息(不是片段
父活动
,而是另一个)
实际上,我从一个服务
到同一个活动
都做了同样的事情,效果非常好
这是我的代码:
片段
:
private void sendBroadcastMessage() {
Intent intent = new Intent("my_event");
// add data
intent.putExtra("message", "test");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
}
活动
:
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"));
}
我刚刚遵循了这一点,但它只适用于从服务
到活动
我认为这与片段中的上下文有关,可能getActivity()
不是正确的方法
有什么想法吗?
谢谢。在活动的onCreate中注册广播,并在onDestroy中注销
在您的情况下,它可能会在onPause中注销。因此,在onDestroy中注销,而不是onPause
谢谢,是的,你不能这样做,因为另一个活动
在广播时不会激活。您必须使用其他方法来传递数据。谢谢@MikeM。谢谢你的回复。好的,但是如果在广播时活动未处于活动状态,那么从服务发送广播时它是如何工作的?活动也不是活动的,但它是有效的……您对如何在没有LocalBroadcastManager
的情况下实现这一点有什么建议吗?呃,不应该这样做,除非我们谈论的不是同一件事,或者除非他们更新了最新版本的LocalBroadcastManager
,以提供自己版本的粘性广播。总之,您可以使用某种形式的持久存储来保存数据,直到您启动另一个活动
,或者将其保存在服务中
,直到另一个活动
需要它,或者使用提供粘性事件的事件总线等。好的,我将尝试您的一个建议,非常感谢您对我的帮助;)