从firebase回调更新Android UI



我是android编程新手,我正在尝试使用firebase实现一个简单的应用程序,利用推送通知。我设置android项目(使用android Studio 2.2)以下谷歌文档,我能够得到通知与应用程序在前台比在后台。我有两个类扩展了FirebaseMessagingService(命名为MyFirebaseMessagingService)和FirebaseInstanceIdService(命名为MyFirebaseInstanceIDService)。

在第一个中,我有onmessagerreceived方法实现,当应用程序在前台或当我收到一个"数据"标签作为通知的一部分时触发。里面有这段代码:

@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();
    }

现在我的问题是更新一个textView在主布局使用变量"cappello"上面提到的。我该怎么做呢?我发现了一些使用不同类的例子,但它们似乎都与这种情况有所不同。

我怎样才能触发一个动作来更新主布局的某些部分?

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

简短的例子,在你的FirebaseMessagingService:: onmessagerreceived,你可能有这个:

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); 

最新更新