java - 在android中收到来自firebase的消息时如何创建事件监听器?

标签 java android firebase event-listener eventhandler

我正在使用 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。做到这一点

  1. 修改您的 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)
        }
    }
    

    }

  2. 在 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/

相关文章:

javascript - firebase .then() 不是函数

java - 当不使用变量时,lambda 表达式中的变量名称约定是什么?

java - 如何重新附加到现有的 Java EE session

java - 字符串 while 循环第 2 部分

android - 如何在 Android API 19 中创建圆形显示动画?

java - 如何从 firebase 数据库中获取数据并将其保存 30 秒,然后获取另一条记录,直到最后一条记录?

Java 对对象的引用

android - 如何从 xml 布局父级获取样式属性

java - 从 Single ValueEventListener 获取 firebase 引用

javascript - 为什么在 Firebase 云函数中没有成功完成 Promise.all() 就退出无服务器函数时性能会下降?