前台服务和静默通知

6

背景:

我一直在使用谷歌的LocationUpdatesForegroundService示例项目来学习有关服务的更多信息。

我通过 Github 桌面下载了该项目并在我的手机上运行它,一切都很好,该项目能够实现其预期功能。

我的手机系统是 Android 8.0.0,API 26

问题:

一旦应用程序被终止,前台服务通知就会出现在状态栏上,此时我听到一个通知声(默认声音)。 然而,我希望通知是静音的,就像一些基于位置的应用程序(例如:Life360)那样。

我已经尝试过的:

上述方法都没有对我起作用,如果有人能够解决这种情况,我将不胜感激。


请查看此解决方案:https://dev59.com/pFkS5IYBdhLWcg3wdmrC - hfarhanahmed
在 LocationUpdatesService.java 的第 298 行后添加 .setDefaults(Notification.DEFAULT_ALL); - hfarhanahmed
@hfarhanahmed 不,仍会发出通知声。 - Doğukan Özdemir
你也改了频道名称吗? - hfarhanahmed
@hfarhanahmed 我没有创建任何新的频道,只是在创建初始频道时将重要性设置为“IMPORTANCE_LOW”。 - Doğukan Özdemir
显示剩余9条评论
5个回答

4
解决方案是使用NotificationManager.IMPORTANCE_LOW并为其创建一个新通道。一旦创建了通道,就无法更改重要性(好吧,你可以,但新的重要性会被忽略)。系统似乎会永久存储通道信息,并且只有卸载应用程序时才会删除任何已创建的通道。您可以删除该通道。
nm.deleteNotificationChannel(nChannel.getId());

并重新创建它使用

nm.createNotificationChannel(nChannel);

以下是从Stack Overflow的答案中翻译而来:如何禁用 NotificationChannel 的声音?


1
请勿复制其他问题的答案,而是将此问题标记为重复项。 - tir38
@tir38 好的,抱歉我还不太熟悉回答问题,下次会注意的。 - hfarhanahmed

3
在LocationUpdatesForegroundService中,当服务执行onUnbind时,会调用“startForeground(NOTIFICATION_ID,getNotification())”,然后通知将显示带有声音。因此,您需要按照下面的代码更改NotificationChannel。
mChannel.setSound(null, null);
mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);

1

mChannel.setSound(null,null) 可以实现此功能,但需要卸载/重新安装应用程序才能生效。或者将 CHANNEL_ID 更改为不同的值也可以重新创建具有更新设置的通道。


你可能需要在生产环境中更改CHANNEL_ID。 - lasec0203

1

我可能回答晚了,但是你尝试重新安装这个应用程序了吗?这很简单,而且可能会解决问题。


0
也许我回答这个问题有点晚了,但是对于其他寻找答案的人,我会补充我的答案:
NotificationCompat.Builder notificationBuilder = new 
                      NotificationCompat.Builder(this, CHANNEL_ID)
.setPriority(NotificationCompat.PRIORITY_LOW)
   .setSilent(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接