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

How to create event listener when message from firebase received in android?

我正在使用 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
    }
}
}

如果 hello 是消息格式中的关键字

,请试试这个
if (remoteMessage.getData().containsKey("hello")) {
}

或者如果 hello 是消息字符串,那么试试这个

Map<String, String> params = remoteMessage.getData();
JSONObject fullObject = new JSONObject(params);
String messageString = fullObject.getString("msg");

希望有用!!

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

public class 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 条件为真时,片段 class 中的 onReceive 方法将被触发,即 value.equalsIgnoreCase("hello")

对于此答案的格式,我们深表歉意。难以调整。

为此,请在您的应用中使用本地广播接收器

示例:

在通知屏幕中像这样使用接收器 @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)
}
}
and in fragment register broadcast receiver in onResume method  like this

 getActivity().registerReceiver(broadcastReceiver, new IntentFilter("custom-listener"));

也在 onPause 方法中取消注册接收器

       getActivity().unregisterReceiver(broadcastReceiver);

并在可以调用 api 的片段中创建广播接收器方法,就像这样

 private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() 
{
    @Override
    public void onReceive(Context context, Intent intent) 


};