Lösung 1: Wenn Sie die Erstellung der Benachrichtigungen durchführen, können Sie die folgenden Schritte ausführen:
Zunächst können Sie jedes Mal, wenn Sie eine neue Benachrichtigung erstellen, diese nach demselben Schlüssel gruppieren, indem Sie Folgendes verwenden setGroup(...)
:
val newMessageNotification1 = NotificationCompat.Builder(applicationContext, ...)
...
.setGroup("group_messages")
.build()
Wenn Sie Benachrichtigungen nach derselben ID ("group_messages") gruppiert haben , können Sie jetzt eine zusammenfassende Benachrichtigung mit unterschiedlicher Absicht erstellen:
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
val notifyIntent = Intent(this, ResultActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val notifyPendingIntent = PendingIntent.getActivity(
this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val summaryNotification = NotificationCompat.Builder(applicationContext, ...)
.setSmallIcon(android.R.drawable.ic_btn_speak_now)
.setContentIntent(notifyPendingIntent)
.setContentTitle("Grouped notification title")
.setContentText("Grouped notification text")
.setGroup("group_messages")
.setGroupSummary(true)
.build()
Als letzten Schritt können Sie if
überprüfen, ob Sie mehr als eine Benachrichtigung mit derselben Gruppe haben, und dann mit einer Gruppenbenachrichtigung benachrichtigen:
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManagerCompat = NotificationManagerCompat.from(applicationContext)
notificationManagerCompat.notify(ID, newMessageNotification1)
val amountOfNotificationsInSameGroup = notificationManager.activeNotifications
// Here we filter notifications that are under same group
.filter { it.notification.group == "group_messages" }
.size
if (amountOfNotificationsInSameGroup >= 2) {
// if we already have minimum of 2 notifications, we'll group them under summary notification
notificationManagerCompat.notify(SUMMARY_NOTIFICATION_ID, summaryNotification)
}
Sie können den Code in Ihrer onMessageReceived
Methode kombinieren . Wie Sie sehen, können Sie jetzt benutzerdefinierte Absichten haben, gruppierte Benachrichtigungen zu verarbeiten. Weitere Informationen zu gruppierten Benachrichtigungen finden Sie hier .
Lösung 2: Wenn Sie die Erstellung von Benachrichtigungen nicht verarbeiten möchten und dennoch wissen möchten, ob die Benachrichtigungen gruppiert sind, können Sie die folgende Lösung ausprobieren:
NotificationManager
hat die Funktion getActiveNotifications () , die Benachrichtigungen zurückgibt , die von der aufrufenden App gepostet und vom Benutzer noch nicht verworfen wurden. Wenn Sie in Android auf gruppierte Benachrichtigungen klicken, werden Benachrichtigungen nicht geschlossen. Daher können Sie die Größe der aktiven Benachrichtigungen in Ihrer Launcher-Aktivität überprüfen, um festzustellen, ob die App gestartet wurde, indem Sie auf gruppierte / gebündelte Benachrichtigungen klicken:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (notificationManager.activeNotifications.size >= 4) {
// Notifications are grouped
// Put your logic here
// Do not forget to clear notifications
NotificationManagerCompat.from(this).cancelAll()
}
}
}
Persönlich würde ich die erste Lösung bevorzugen, aber entsprechend den von Ihnen veröffentlichten Problemen können Sie auch die zweite Option verwenden. Beachten Sie jedoch, dass Sie nicht unterscheiden können, ob die App über den Launcher oder durch Klicken auf gruppierte Benachrichtigung gestartet wurde.
Bei der zweiten Lösung können folgende Fragen auftreten:
Frage 1: Wie kann ich einen normalen Benachrichtigungsklick von einer Gruppe in derselben Aktivität unterscheiden?
- Sie können einfach click_action
normale Benachrichtigungsklicks definieren und an verschiedene Aktivitäten weiterleiten. Überprüfen Sie die Dokumente .
Wenn Sie frühere Benachrichtigungen ersetzen möchten, können Sie diese auch tag
in Ihrem Benachrichtigungs-JSON auf der Backend-Seite definieren. Auf diese Weise werden Benachrichtigungen nicht gebündelt, da neuere Benachrichtigungen die alte durch dasselbe Tag ersetzen. Überprüfen Sie die Dokumente .
Ich hoffe meine Antwort hilft.