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