【问题标题】:Handle Android push notification on current Activity处理当前 Activity 的 Android 推送通知
【发布时间】:2019-10-08 21:08:07
【问题描述】:

我已经实现了 Android 推送通知,并且可以在应用程序运行时使用此方法扩展 FirebaseMessagingService 来处理它:

@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
   ...
}

但我真正需要的是在我当前的活动中获取通知数据以更新一些字段以供用户实时查看。但我找不到办法做到这一点。有人可以帮我吗?

【问题讨论】:

标签: android firebase-cloud-messaging


【解决方案1】:

创建本地广播接收器
当您在 FirebaseMessagingService 收到通知时,您将使用 LocalBroadcastReceiver 将数据发送到您需要的活动。既简单又安全。

在您的 FirebaseMessagingService 上

@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);

//Take the data from message received
String myData = remoteMessage.get("MyDataKey");

//Send data through a local broadcast receiver
Intent intent = new Intent("IntentFilterAction");
intent.putExtra("MyDataKey", myData);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

在活动 onCreate

//Create BroadcastReceiver
BroadcastReceiver broadcastReceiver = new BroadcastReceiver(){
      @Override
      public void onReceive(Context context, Intent intent) {
          super.onReceive(context, intent);

          //Get data from intent
          String mydata = intent.getExtras
      }
};

IntentFilter intentFilter = new IntentFilter("IntentFilterAction");
LocalBroadcastManager.getInstance(getContext()).registerReceiver(broadcastReceiver, intentFilter);

onDestroy 活动

//Unregister BroadcastReceiver
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(broadcastReceiver);

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    docs查看这个:

        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
    
        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            updateData(remoteMessage.getData());
    
        }
    
    }
    
    
    
    public void updateData(Map<String, String> data){
            // update your data here
            //ex: editText1.setText("text");
        }
    

    【讨论】:

    • 文档中的代码用于服务,而不是活动。挑战是将数据负载从服务中获取到活动。
    • @DanielNugent 然后可以尝试 1)将数据保存在共享首选项中并从活动中检索它们。或 2) 准备一个pending intent 并在开始您的活动时从中获取数据。如果我正确理解问题,我认为这将解决它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多