java - 如何创建多个前台通知?
问题描述
下面是我的服务类中的一段代码。
如果用户“加入团队”(操作 = 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);
解决方案
您使用startForeground()
的通知是与前台服务相对应的一个“官方”通知;Android 坚持让您在服务运行时始终启动的那个。
如果您在后续调用 时提供不同的通知通道 ID,我并不感到惊讶startForeground()
,它会删除并替换原始通知。否则,您最终可能会收到针对单个服务的多个前台通知,事情可能会变得混乱。
相反,仅用于NotificationManager.notify()
管理超出原始前台服务通知发生的任何通知。为这些额外的通知使用不同的 ID。
一个好的做法是为前台服务通知使用固定 ID。您仍然可以随意更改Notification
;当您拥有固定 ID 时,更容易记住哪个Notification
是您的“官方”ID。
您还可以使用 ; 操作您的“官方前台服务通知” notify()
;你不必使用startForeground()
. startForeground()
一开始只需要调用一次,以将服务与特定的通知 ID 相关联。
推荐阅读
- c++ - 使用 netlink 获取进程 inode
- java - 单击结帐按钮时总计的问题
- reactjs - 我可以在 REST API 和 RectJS 中使用会话对象和会话 ID 进行身份验证吗?
- sql - Postgres对索引列的简单选择太慢了
- laravel-valet - 为什么 Laravel Valet 不在 Catalina 上使用自制软件?
- sql - 如何获得每年 SQLite 的 x 个最佳结果
- scala - Scala中的方法调用反射会导致性能下降吗?
- javascript - 无法使用 Angular 发布到 CosmosDB
- ruby-on-rails - Rails HABTM:通过
- c++ - 执行转换错误的过程