Android: удалить уведомление из панели уведомлений
Имеется некоторое уведомление с 2 кнопками
val notificationIntentCompleteOrder = Intent(context, CloseOrderService::class.java)
notificationIntentCompleteOrder.putExtra("oid", oid)
val notificationIntentDetails = Intent(context, MainActivity::class.java)
notificationIntentDetails.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
notificationIntentDetails.putExtra("oid", oid)
notificationIntentDetails.putExtra("action", type)
notificationIntentDetails.putExtra("fragment", "notificationDetails")
val pendingIntentDetails = PendingIntent.getActivity(
context,
0, notificationIntentDetails,
PendingIntent.FLAG_CANCEL_CURRENT
)
val pendingIntentClose = PendingIntent.getService(
context,
0, notificationIntentCompleteOrder,
PendingIntent.FLAG_CANCEL_CURRENT
)
mBuilder.setSmallIcon(R.drawable.ic_push)
.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
.setTicker(message)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(message)
.setStyle(NotificationCompat.BigTextStyle().bigText(message))
.setPriority(NotificationCompat.PRIORITY_MAX)
.addAction(R.drawable.ic_delete_white, "Завершить", pendingIntentClose)
.addAction(R.drawable.ic_archive_white, "Подробности", pendingIntentDetails)
.setAutoCancel(true)
Необходимо при клике на кнопки уведомления, закрывать это уведомление. Но как это сделать? autoCancel(true) работает на само оповещение, а не на его кнопки
Как я понимаю
notificationManager.notify(m, mBuilder.build())
m - Id notification Может тогда его прокидывать вместе в intent, и уже оттуда закрывать по id?
notificationManager.cancel(notifyId)
Но мне кажется это очень большим костылем
Ответы (1 шт):
На самом деле предложенный вами вариант является правильным. У каждого уведомления есть свой идентификатор, по которому можно управлять конкретно этим уведомлением. К примеру телеграм хранит уникальный идентификатор для каждого чата, и когда мы прочитываем это сообщение с другого устройства, сервис приложения по этому идентификатору удаляет нотификацию о новом сообщении из этого чата. Таким образом сохранив этот идентификатор нотификации, можно даже через пуш уведомление эту нотификацию убрать.