如何从fcm服务调用活动类方法。
我已经尝试过这种方式Calling activity class method from Service class
但是在fcm服务onBind
方法是最终的,所以我们不能覆盖,所以任何其他方式从fcm服务调用活动类方法。
供参考一些代码如何实现fcm。
public class FCMListenerService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message) {
}
}
当我的活动正在运行并且fcm通知出现时,我想更新代码?有没有办法处理这个要求?
答案 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()
方法