在Android中获取多个通知而不是一个通知

时间:2017-08-18 13:37:27

标签: android firebase push-notification android-pendingintent firebase-notifications

我在Android应用中使用Firebase通知。 使用以下代码生成通知:

public class FirebaseNotificationService extends FirebaseMessagingService {

private static final String TAG = FirebaseNotificationService.class.getSimpleName();
private String strTitle = "My Notification";
private String strMessage = "No Description";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (Prefrences.getBooleanValue(getApplicationContext(), IS_LOGIN) && Prefrences.getBooleanValue(getApplicationContext(), Prefrences.IS_NOTIFICATION)) {
        if (remoteMessage.getData().get("title") != null) {
            strTitle = remoteMessage.getData().get("title");
        }
        if (remoteMessage.getData().get("message") != null) {
            strMessage = remoteMessage.getData().get("message");
        }
        sendNotification(strTitle, strMessage);
    }
}

private void sendNotification(String strTitle, String messageBody) {
    try {
        if (!getTopActivity().equals("com.app.activity.NotificationActivity")) {
            Intent intent = new Intent(this, DashboardActivity.class);
            intent.putExtra("notification", "yes");
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                    PendingIntent.FLAG_ONE_SHOT);

            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.app_icon)
                    .setContentTitle(strTitle)
                    .setContentText(messageBody)
                    .setAutoCancel(true)
                    .setSound(defaultSoundUri)
                    .setContentIntent(pendingIntent);

            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            notificationManager.notify(++NOTIFICATION_ID /* ID of notification */, notificationBuilder.build());
        } else {
            Intent intent = new Intent();
            intent.setAction("load_service");
            sendBroadcast(intent);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String getTopActivity() {
    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    return taskInfo.get(0).topActivity.getClassName();
}
}

问题是对于从后端发送的相同通知,状态栏上的多个通知正在生成而不是单个通知。

我已将NOTIFICATION_ID作为常量文件中的静态整数。 我正在递增它以获得不同的通知。

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

当您收到相同的通知时,不要增加通知ID。您需要设置一些标志来检查收到的通知是相同还是不同的通知。当您从FCM发送通知时,发送一些额外的有效负载,其中包含带有通知ID的键值对。设置该通知ID而不是从代码中增加。希望它有所帮助