Solução 1: se você lida com a criação das notificações, tente as seguintes etapas:
Antes de tudo, sempre que você cria uma nova notificação, é possível agrupá-las pela mesma chave usando setGroup(...)
:
val newMessageNotification1 = NotificationCompat.Builder(applicationContext, ...)
...
.setGroup("group_messages")
.build()
Ao agrupar as notificações pelo mesmo ID ("group_messages") , agora você pode criar uma notificação resumida com intenção diferente:
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()
Como última etapa, você pode if
verificar se possui mais de uma notificação com o mesmo grupo e depois notificá-la com a notificação do grupo:
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)
}
Você pode combinar o código no seu onMessageReceived
método. Como você pode ver, agora você pode ter uma intenção personalizada para lidar com notificações agrupadas. Você pode ler mais sobre notificações agrupadas aqui .
Solução 2: se você não deseja lidar com a criação de notificações e ainda deseja saber se as notificações estão agrupadas, tente a seguinte solução:
NotificationManager
possui a função getActiveNotifications () que retornará notificações que foram postadas pelo aplicativo de chamada e que ainda não foram descartadas pelo usuário. Quando você clica em notificações agrupadas no Android, as notificações não serão descartadas. Portanto, você pode verificar o tamanho das notificações ativas na atividade do iniciador para detectar se o aplicativo foi iniciado clicando em notificações agrupadas / em conjunto:
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()
}
}
}
Pessoalmente, eu prefiro a primeira solução, mas de acordo com os problemas que você postou, você também pode usar a segunda opção, mas observe que não será possível diferenciar se o aplicativo foi iniciado a partir do iniciador ou clicando em notificação agrupada.
Com a segunda solução, pode haver as seguintes perguntas:
T1: como diferenciar o clique normal de notificação do grupo um na mesma atividade?
- Simplesmente, você pode definir click_action
e encaminhar cliques de notificação normais para atividades diferentes. Verifique os documentos .
Se você deseja substituir as notificações anteriores, também pode definir o mesmo tag
no JSON da sua notificação no lado de back-end. Dessa forma, as notificações não serão agrupadas porque as notificações mais recentes substituirão as antigas pela mesma tag. Verifique os documentos .
Espero que minha resposta ajude.