从FirebaseMessagingService类调用活动类方法

Yog*_*thi 4 java oop service android

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

我已经尝试过这种方式从Service类调用活动类方法

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

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

public class FCMListenerService extends FirebaseMessagingService {
 @Override
    public void onMessageReceived(RemoteMessage message) {
   }
}
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 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);
         }
  }
Run Code Online (Sandbox Code Playgroud)

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

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

不要忘记在您的活动中使用onCreate()/ onDestroy()方法注册/取消注册您的接收器.

的onCreate()

registerReceiver(myReceiver, new IntentFilter(FCMListenerService.INTENT_FILTER));
Run Code Online (Sandbox Code Playgroud)

的onDestroy()

unregisterReceiver(myReceiver);
Run Code Online (Sandbox Code Playgroud)


Jag*_*ngh -3

试试这个假设你想调用MainActivity;的方法 在 MainActivity 中创建static变量Context context并初始化onCreate()。static并让你想在 MainActivity 中调用的方法说

public static void updateUi()
{
// code to update Ui
} 
Run Code Online (Sandbox Code Playgroud)

然后从服务中调用这样的:-

((MainActivity)MainActivity.context).updateUi();
Run Code Online (Sandbox Code Playgroud)

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