Android Firebase Messaging:如何从onMessageReceived()更新UI

red*_*nda 3 android android-activity firebase firebase-notifications

我已在我的应用中成功实施了Firebase消息传递.在后台工作得很好,当应用程序在前台时,会调用onMessageReceived()(yippee!).

我遇到的问题是我需要动态更新UI,而我仍然坚持实现这一目标的最佳方法.我不想向用户发送应用程序内通知(如示例代码所示),我不确定是否要发送广播,我想要做的就是访问MainActivity以调用方法已经存在,但我没有参考服务中的MainActivity.

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getNotification().getBody() != null) {
        Log.d(LOG_TAG, "Message received: " + remoteMessage.getNotification().getBody());
    } else {
        Log.d(LOG_TAG, "Message received: " + remoteMessage.getData().get("message"));
    }

    // Call method in MainActivity
    // <<< What goes Here?>>>>

}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个简单的用例,但我无法在网上找到任何帮助.

提前致谢

Nis*_*hal 16

是的,您可以使用本地广播更新UI并将值传递给您的活动

在您的onMessageReceived() Firebase服务中.

broadcaster = LocalBroadcastManager.getInstance(getBaseContext());

   Intent intent = new Intent(REQUEST_ACCEPT);
   intent.putExtra("Key", value);
   intent.putExtra("key", value);
   broadcaster.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

并在Activity或片段方法中注册本地广播

 @Override
    public void onStart() {
        super.onStart();
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver((receiver),
                new IntentFilter(PushNotificationService.REQUEST_ACCEPT)
        );
    }



    @Override
        public void onStop() {
             super.onStop();
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver);

        }
Run Code Online (Sandbox Code Playgroud)

处理这样的更新事件,更新UI工作在这里,它将在收到通知时自动调用,onMessageReceived()发送广播.

receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                try {
                    String   value= intent.getStringExtra("key");
                    String value= intent.getStringExtra("key");

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        };
Run Code Online (Sandbox Code Playgroud)