java - 在android中收到来自firebase的消息时如何创建事件监听器?
问题描述
我正在使用 firebase 接收消息。收到消息时 (onMessageReceived())。我想检查消息是否包含必需的字符串(比如“hello”)。如果是,我希望它被另一个片段知道,以便片段中的某些方法将基于消息被调用。
为此,我想在收到消息时创建事件侦听器。在我的片段中,将调用两个 API。on 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) } }
}
在您的片段类中进行更改
公共类 BlankFragment 扩展片段 {
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);
}
};
}
通过广播,您将能够收听您想要的事件。当您的 if 条件为真时,Fragment 类中的 onReceive 方法将被触发,即value.equalsIgnoreCase("hello")
对此答案的格式表示歉意。难以调整。
推荐阅读
- javascript - 如何使用 Font-Face 来描述 JS 中的新字体或 React 提供内联属性?
- java - 如何在火花数据框的多个列上进行旋转?
- powerbi - 如何创建 PowerBi 模型,您可以在其中对收入进行建模,用户可以输入变量值并进行计算?
- android - Android API 30 模拟器不工作(Android Studio)
- javascript - Javascript setInterval 计时器不以 clearInterval 停止
- flutter - 在静态页面中“包装”Flutter Web
- javascript - 密码的正则表达式必须包含至少八个字符、至少一个数字以及大小写字母
- reactjs - 如何减少反应导航标题的 zIndex 值?
- wpf - 带有 svg 图像的 MahApps 按钮图标
- java - 我在使用条件运算符 (?:) 比较两个数字时遇到问题