在当前活动中处理 Android 推送通知。

15 浏览
0 Comments

在当前活动中处理 Android 推送通知。

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

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

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

0
0 Comments

问题的出现原因是,给出的代码是用于Service而不是Activity的。挑战是将数据有效载荷从Service传递到Activity。

解决方法之一是将数据保存在SharedPreferences中,并从Activity中检索它们。

解决方法之二是准备一个PendingIntent,并在启动Activity时从中获取数据。

如果我正确理解问题,我认为这两种方法都能解决这个问题。

0
0 Comments

问题:如何在当前Activity上处理Android推送通知?

原因:在FirebaseMessagingService接收到通知后,需要将数据发送给需要的Activity,并且需要保证安全。

解决方法:

1. 创建一个本地广播接收器。

2. 在FirebaseMessagingService中的onMessageReceived方法中获取到数据,并通过本地广播接收器发送数据。

3. 在Activity的onCreate方法中注册广播接收器,并通过IntentFilter指定过滤的Action。

4. 在Activity的onDestroy方法中注销广播接收器。

代码如下:

在FirebaseMessagingService中:

public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    // 获取到接收到的数据
    String myData = remoteMessage.get("MyDataKey");
    // 通过本地广播接收器发送数据
    Intent intent = new Intent("IntentFilterAction");
    intent.putExtra("MyDataKey", myData);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

在Activity的onCreate方法中:

// 创建广播接收器
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        // 从intent中获取数据
        String mydata = intent.getExtras().getString("MyDataKey");
        // 处理数据
        // ...
    }
};
// 注册广播接收器
IntentFilter intentFilter = new IntentFilter("IntentFilterAction");
LocalBroadcastManager.getInstance(getContext()).registerReceiver(broadcastReceiver, intentFilter);

在Activity的onDestroy方法中:

// 注销广播接收器
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(broadcastReceiver);

希望对你有所帮助 🙂

0