从FirebaseMessagingService类调用活动类方法

时间:2016-08-05 04:43:22

标签: java android oop service

  

如何从fcm服务调用活动类方法。

我已经尝试过这种方式Calling activity class method from Service class

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

供参考一些代码如何实现fcm。

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

当我的活动正在运行并且fcm通知出现时,我想更新代码?有没有办法处理这个要求?

2 个答案:

答案 0 :(得分:22)

我认为你必须尝试使用​​BroadcastReceiver。这是您从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);

答案 1 :(得分:-1)

试试这个假设您要调用MainActivity的方法; 设置static变量Context context并在MainActivity的onCreate()中初始化。 并使您想要在MainActivity中调用的方法static

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

然后从这样的服务电话: -

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

更新: 如果您想在多个活动中执行,那么您可以使用此方法并处理此updateUi()方法

中的逻辑