有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从FirebaseMessagingService类调用活动类方法

How to call activity class method from fcm service.

我已经试过了Calling activity class method from Service class

但在fcm服务中onBind方法是最终的,所以我们不能覆盖,所以任何其他从fcm服务调用活动类方法的方法

参考一些如何实现fcm的代码

public class FCMListenerService extends FirebaseMessagingService {
 @Override
    public void onMessageReceived(RemoteMessage message) {
   }
}

当我的活动正在运行且收到fcm通知时,我是否要更新代码?有没有办法处理这个要求


共 (2) 个答案

  1. # 1 楼答案

    我想你得试试收音机。以下是您从FCMListenerService发送消息的方式:

      public class FCMListenerService extends FirebaseMessagingService {
    
            public static final String INTENT_FILTER = "INTENT_FILTER";
             @Override
             public void onMessageReceived(RemoteMessage message) {
                  Intent intent = new Intent(INTENT_FILTER);
                  sendBroadcast(intent);
             }
      }
    

    然后,您可以在活动中使用广播接收器,尝试以这种方式捕捉它:

    private BroadcastReceiver myReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updateUi();
        }
    };
    

    不要忘记在活动中的onCreate()/onDestroy()方法中注册/注销接收器

    onCreate()

    registerReceiver(myReceiver, new IntentFilter(FCMListenerService.INTENT_FILTER));
    

    onDestroy()

    unregisterReceiver(myReceiver);
    
  2. # 2 楼答案

    假设您要调用MainActivity的方法,请尝试此方法; 使static变量Context context并在main活动的onCreate()中初始化。 并将要在main活动中调用的方法static设为

    public static void updateUi()
    {
    // code to update Ui
    } 
    

    然后从这样的服务中呼叫:-

    ((MainActivity)MainActivity.context).updateUi();
    

    更新: 如果希望在多个活动中执行,则可以使用此方法并处理此updateUi()方法中的逻辑