如何创建多个前台通知?

How to create more than one foreground notification?

下面是我的服务中的一段代码 class。

如果用户 "joins a team" (operation = 0) 那么它会创建一个具有指定规格的通知,但是如果 用户共享他们的位置 (operation = 1) 那么它应该创建一个单独的前台通知。相反,一个只是取代另一个。

不知道为什么,他们有不同的ID只是同一个频道。 我也试过分开他们的频道ID,还是一样的问题

int id = NOTIFICATION_LOCATION;
        int icon = R.drawable.ic_gps_on;
        String message = "Tap to disable location updates";

        if (operation == 0) {
            id = NOTIFICATION_RESPONDER;
            icon = R.drawable.ic_responder_icon;
            message = "Tap to leave the responding team";
        }

        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID_1)
                .setSmallIcon(icon)
                .setContentTitle("Location established")
                .setContentText(message)
                .setContentIntent(PendingIntent.getBroadcast(getApplicationContext(), 0, getBroadcastIntent(operation), PendingIntent.FLAG_UPDATE_CURRENT))
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.primaryColor))
                .setDefaults(Notification.DEFAULT_SOUND)
                .setVisibility(VISIBILITY_PUBLIC)
                .build();

        startForeground(id, notification);

您使用 startForeground() 操作的通知是与前台服务对应的 "official" 通知; Android 坚持让你随时可用的服务是 运行。

如果您在对 startForeground() 的后续调用中提供不同的通知渠道 ID,我并不感到惊讶,它 擦除 替换 原来的通知。否则,您最终可能会为单个服务收到多个前台通知,事情可能会变得混乱。

相反,只需使用 NotificationManager.notify() 来管理超出原始前台服务通知的任何通知。为这些额外的通知使用不同的 ID。

一个好的做法是为您的前台服务通知使用固定的 ID。您仍然可以随意更改 Notification;当您有固定 ID 时,更容易记住哪个 Notification 是您的 "official"。

您还可以使用 notify() 操纵您的 "official foreground service notification";您不必使用 startForeground()。在开始时只需要 一次 调用 startForeground() 来将服务与特定通知 ID 相关联。