从Firebase回调更新Android UI

7
我是一名Android编程的新手,我正在尝试使用Firebase实现一个简单的应用程序来使用推送通知。我遵循谷歌文档设置了Android项目(使用Android Studio 2.2),我能够在前台和后台运行应用程序时接收到通知。我有两个类扩展FirebaseMessagingService (命名为MyFirebaseMessagingService) 和 FirebaseInstanceIdService (命名为MyFirebaseInstanceIDService)。

在第一个类中,我实现了onMessageReceived方法,当应用程序在前台或当我接收到通知的“data”标签时会触发该方法。因此,我在里面加入了如下代码:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        String cappello;
        cappello = remoteMessage.getNotification().getBody();
    }

现在我的问题是如何使用上面提到的变量“cappello”更新主布局中的textView。我该怎么做?我找到了一些使用不同类的示例,但它们似乎与该情况有所不同。

如何触发更新主布局的某些部分的操作?例如textView?

1个回答

16

使用广播接收器并在您的活动中注册它,当新消息到达时会触发。

简单示例,在您的FirebaseMessagingService :: onMessageReceived中,您可以这样写:

cappello = remoteMessage.getNotification().getBody();
Intent intent = new Intent();
intent.putExtra("extra", cappello); 
intent.setAction("com.my.app.onMessageReceived");
sendBroadcast(intent); 

然后在您的MainActivity中,您实现一个BroadcastReceiver:

private class MyBroadcastReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();
    String state = extras.getString("extra");
    updateView(state);// update your textView in the main layout 
  }
} 

并在 MainActivity 的 onResume() 方法中注册它:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.my.app.onMessageReceived");
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, intentFilter); 

当应用程序被杀死时,它不起作用。但是在应用程序正常运行时它能够正常工作。如果我想要更新用户界面,当应用程序被杀死时该怎么办? - jeel raja
当应用程序被杀死时,您将无法收到推送通知。 - Rissmon Suresh
在同一个活动中,在 onStop() 中取消注册它。 - Ranjit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接