从firebase回调更新Android UI

时间:2016-09-23 15:52:22

标签: android firebase firebase-cloud-messaging

我是android编程的新手,我正在尝试使用firebase实现一个使用推送通知的简单应用程序。我设置了Android项目(使用Android Studio 2.2)以及google文档,我可以通过前景中的app而不是后台获得通知。 我有两个扩展FirebaseMessagingService(名为MyFirebaseMessagingService)和FirebaseInstanceIdService(名为MyFirebaseInstanceIDService)的类。

在第一个实践中,我实现了onMessageReceived方法,该方法在应用程序处于前台或我收到数据时触发。标记作为通知的一部分。所以我在里面有这段代码:

@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。上文提到的。我怎样才能做到这一点?我找到了一些使用不同类的例子,但它们似乎都与这种情况有所不同。

我可以触发一个动作来更新主布局的某些部分吗?例如texView?

1 个答案:

答案 0 :(得分: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);