如何只创建一次前台通知,或者至少如何不在连续的 startForegroundService() 调用中播放通知声音?
您可以检查通知是否已经可见并仅在不可见时显示。您需要有对通知 PendingIntent 和 notificationId 的引用。
fun isNotificationVisible(context: Context, notificationIntent: Intent, notificationId: Int): Boolean {
return PendingIntent.getActivity(context, notificationId, notificationIntent, PendingIntent.FLAG_NO_CREATE) != null
}
当我点击前台通知时如何返回我的应用程序?
您需要 PendingIntent 才能从通知中打开应用。要打开显示的最后一个活动,您可以使用每个活动的 onResume() 方法中的 Preferences 记住这一点,并将通知路由到一个路由活动,该活动根据保存在首选项中的值启动正确的活动。
val intent = Intent(context, RouteActivity::class.java)
val notificationBuilder = NotificationCompat.Builder(context, channelId)
.setContentIntent(intent)
val notificationManager = NotificationManagerCompat.from(context)
val notification = notificationBuilder.build()
notificationManager.notify(notificationId, notification)
另一种方法是更新通知 PendingIntent,如果它已经与显示的最后一个活动可见。在这种情况下,您不必在 Preferences 上存储任何值,也不需要路由活动。