我正在使用 firebase 来接收消息。收到消息时(onMessageReceived())。我想检查消息是否包含所需的字符串(说“你好”)。如果是,我希望另一个 fragment 知道它,以便根据消息调用 fragment 中的某些方法。
为此,我想在收到消息时创建事件监听器。 在我的 fragment 中,将调用两个 API。 API 上将调用 onCreatedView()。 根据来自 firebase 的消息,应该调用第二个 API。 这两个 API 调用应在几毫秒内完成。
MyFireBaseMessage.java
public class MyMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("message here","message here "+ remoteMessage.getData().toString());
String value = remoteMessage.getData().get("msg");
Log.d("value here","value here"+" "+value);
if (value.equalsIgnoreCase("hello"))
{
//implement custom event listener here
}
}
}
最佳答案
我现在能想到的一种方法是使用 LocalBroadcast。做到这一点
修改您的 Firebase 服务并添加此内容
public class MyMessagingService extends FirebaseMessagingService { private LocalBroadcastManager broadcaster; @Override public void onCreate() { broadcaster = LocalBroadcastManager.getInstance(this); } @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); Log.d("message here", "message here " + remoteMessage.getData().toString()); String value = remoteMessage.getData().get("msg"); Log.d("value here", "value here" + " " + value); if (value.equalsIgnoreCase("hello")) { Intent intent = new Intent("custom-listener"); broadcaster.sendBroadcast(intent) } }
}
在 fragment 类中进行更改
公共(public)类 BlankFragment 扩展 Fragment {
Context context;
BroadcastReceiver br;
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onResume() {
super.onResume();
setup();
}
@Override
public void onDestroyView() {
super.onDestroyView();
LocalBroadcastManager.getInstance(context).unregisterReceiver(mMessageReceiver);
}
private void setup() {
LocalBroadcastManager.getInstance(context).registerReceiver(mMessageReceiver,
new IntentFilter("custom-listener"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};
}
通过广播,您将能够收听您想要收听的 Activity 。当您的 if 条件为 true 时,Fragment 类中的 onReceive 方法将被触发,即 value.equalsIgnoreCase("hello")
对此答案的格式表示歉意。调整起来有困难。
关于java - 在android中收到来自firebase的消息时如何创建事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57488181/