【问题标题】:Foreground Service with a Silent Notification带有静默通知的前台服务
【发布时间】:2019-02-16 22:38:32
【问题描述】:

上下文:

我一直在使用 Google 的 LocationUpdatesForegroundService 示例项目来了解有关服务的更多信息。

我已经通过 Github 桌面下载了该项目并在我的手机上运行它,一切都很好,该项目完成了它的预期。

我的手机是 Android 8.0.0,API 26

问题:

应用程序终止后,前台服务通知会显示在状态栏上,一旦发生,我就会听到通知声音(默认声音)。 但是,我希望通知保持静音,就像在某些基于位置的应用程序中一样(例如:Life360

到目前为止我所做的尝试:

以上都没有为我工作,如果有人能对这种情况有所了解,我将不胜感激。

【问题讨论】:

  • 你在 startForground(id, notification); 中调用通知吗?功能?
  • @hfarhanahmed Yes in LocationUpdatesService.java at line 226
  • 我使用的代码甚至没有builder.setDefaults(Notification.DEFAULT_ALL);
  • 添加 .setDefaults(Notification.DEFAULT_ALL);在 LocationUpdatesService.java 的第 298 行之后

标签: java android notifications foreground-service


【解决方案1】:

解决方案是使用 NotificationManager.IMPORTANCE_LOW 并为其创建一个新频道。创建频道后,您无法更改重要性(当然可以,但新的重要性会被忽略)。频道信息似乎会被系统永久存储,并且只有在您卸载应用程序时才会删除创建的任何频道。您可以将频道删除为

nm.deleteNotificationChannel(nChannel.getId());

并用

重新创建它
nm.createNotificationChannel(nChannel);

在这里通过堆栈溢出答案Disable sound from NotificationChannel

【讨论】:

  • 不要只是复制/粘贴另一个问题的答案。而是将此问题标记为重复。
  • @tir38 好的,抱歉,我是新手。下次会做。
【解决方案2】:

在LocationUpdatesForegroundService中,当服务onUnbind时,它会调用'startForeground(NOTIFICATION_ID, getNotification())',然后Notification就会有声音显示。所以你需要按照下面的代码更改 NotificationChannel

mChannel.setSound(null, null);
mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);

【讨论】:

    【解决方案3】:

    mChannel.setSound(null,null) 会这样做,但您需要卸载/重新安装应用程序才能生效。或者将 CHANNEL_ID 更改为不同的值也会使用更新的设置重新创建频道。

    【讨论】:

    • 您可能会在生产环境中更改 CHANNEL_ID
    【解决方案4】:

    我可能回答得有点晚了,但是您是否尝试过重新安装该应用程序?这很简单,它可能会解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多