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