首页 > 解决方案 > 在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
    }
}
}

标签: javaandroidfirebaseevent-listenereventhandler

解决方案


我现在能想到的一种方法是使用 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. 在您的片段类中进行更改

公共类 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")

对此答案的格式表示歉意。难以调整。


推荐阅读