带有静默通知的前台服务
Foreground Service with a Silent Notification
上下文:
我一直在使用 Google 的 LocationUpdatesForegroundService 示例项目来进一步了解服务。
我已经通过 Github 桌面和 运行 在我的 phone 上下载了该项目,一切都很好,该项目实现了它的预期目标。
我的phone是Android8.0.0,API26
问题:
一旦应用程序终止,前台服务通知就会出现在状态栏上,一旦发生这种情况,我就会听到通知声音(默认声音)。
但是,我希望通知保持静音,就像在某些基于位置的应用程序中一样(例如:Life360)
到目前为止我尝试过的:
- 在 LocationUpdatesService.java 添加
159
尝试 mChannel.setSound(null,null);
- 在 LocationUpdatesService.java 行
296
更改为 .setPriority(Notification.PRIORITY_HIGH)
.setPriority(Notification.PRIORITY_LOW)
- 在 LocationUpdatesService.java 的第
158
行将 NotificationManager.IMPORTANCE_DEFAULT
更改为 NotificationManager.IMPORTANCE_LOW)
- 在 LocationUpdatesService.java 行
300
添加了 setSound(null)
None 以上对我有用,如果有人能对这种情况有所了解,我将不胜感激。
mChannel.setSound(null,null) 会执行此操作,但您需要 uninstall/reinstall 应用程序才能生效。或者将 CHANNEL_ID 更改为不同的值也将使用更新的设置重新创建频道。
解决方案是使用 NotificationManager.IMPORTANCE_LOW 并为其创建一个新频道。创建频道后,您无法更改重要性(好吧,您可以,但新的重要性将被忽略)。频道信息似乎由系统永久存储,并且创建的任何频道仅在您卸载应用程序时才会被删除。您可以将频道删除为
nm.deleteNotificationChannel(nChannel.getId());
并用
重新创建它
nm.createNotificationChannel(nChannel);
通过此处的堆栈溢出答案
在LocationUpdatesForegroundService 中,当服务onUnbind 时,它会调用'startForeground(NOTIFICATION_ID, getNotification())',然后Notification 会显示声音。所以你需要按照下面的代码更改 NotificationChannel
mChannel.setSound(null, null);
mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
我的回答可能有点晚了,但你有没有尝试重新安装应用程序?这很简单,可能会解决问题。
上下文:
我一直在使用 Google 的 LocationUpdatesForegroundService 示例项目来进一步了解服务。
我已经通过 Github 桌面和 运行 在我的 phone 上下载了该项目,一切都很好,该项目实现了它的预期目标。
我的phone是Android8.0.0,API26
问题:
一旦应用程序终止,前台服务通知就会出现在状态栏上,一旦发生这种情况,我就会听到通知声音(默认声音)。 但是,我希望通知保持静音,就像在某些基于位置的应用程序中一样(例如:Life360)
到目前为止我尝试过的:
- 在 LocationUpdatesService.java 添加
159
尝试mChannel.setSound(null,null);
- 在 LocationUpdatesService.java 行
296
更改为.setPriority(Notification.PRIORITY_HIGH)
.setPriority(Notification.PRIORITY_LOW)
- 在 LocationUpdatesService.java 的第
158
行将NotificationManager.IMPORTANCE_DEFAULT
更改为NotificationManager.IMPORTANCE_LOW)
- 在 LocationUpdatesService.java 行
300
添加了setSound(null)
None 以上对我有用,如果有人能对这种情况有所了解,我将不胜感激。
mChannel.setSound(null,null) 会执行此操作,但您需要 uninstall/reinstall 应用程序才能生效。或者将 CHANNEL_ID 更改为不同的值也将使用更新的设置重新创建频道。
解决方案是使用 NotificationManager.IMPORTANCE_LOW 并为其创建一个新频道。创建频道后,您无法更改重要性(好吧,您可以,但新的重要性将被忽略)。频道信息似乎由系统永久存储,并且创建的任何频道仅在您卸载应用程序时才会被删除。您可以将频道删除为
nm.deleteNotificationChannel(nChannel.getId());
并用
重新创建它nm.createNotificationChannel(nChannel);
通过此处的堆栈溢出答案
在LocationUpdatesForegroundService 中,当服务onUnbind 时,它会调用'startForeground(NOTIFICATION_ID, getNotification())',然后Notification 会显示声音。所以你需要按照下面的代码更改 NotificationChannel
mChannel.setSound(null, null);
mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);
我的回答可能有点晚了,但你有没有尝试重新安装应用程序?这很简单,可能会解决问题。