首页 > 解决方案 > 如何创建多个前台通知?

问题描述

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

如果用户“加入团队”(操作 = 0),那么它会创建一个具有指定规范的通知,但是如果用户共享他们的位置(操作 = 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);

标签: javaandroidandroid-studioserviceandroid-notifications

解决方案


您使用startForeground()的通知是与前台服务相对应的一个“官方”通知;Android 坚持让您在服务运行时始终启动的那个。

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

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

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

您还可以使用 ; 操作您的“官方前台服务通知” notify();你不必使用startForeground(). startForeground()一开始只需要调用一次,以将服务与特定的通知 ID 相关联。


推荐阅读