Что я должен изменить, чтобы при нажатии на кнопку уведомления она закрывалась?

#android #kotlin

#Android #котлин

Вопрос:

Вчера вечером уведомление закрывалось, но сегодня я сел проверить и увидел, что уведомление перестало закрываться, что мне делать?

 private fun sendNotification(){    val closeIntent = Intent(this, CloseNotificationReceiver::class.java)  .putExtra("ID", notificationId)  val closeFlag = if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.M)  PendingIntent.FLAG_IMMUTABLE else 0  val closePendingIntent = PendingIntent  .getBroadcast(this, 0, closeIntent, closeFlag)   val builder = NotificationCompat.Builder(this, CHANNEL_ID)  ///  .addAction(R.drawable.ic_launcher_background, "400 мл", closePendingIntent)  ////    with(NotificationManagerCompat.from(this)) {  notify(notificationId, builder.build())  

 class CloseNotificationReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) {  val id = intent.getIntExtra("ID", 0)  NotificationManagerCompat.from(context).cancel(id) }}  

 lt;receiver  android:name=".CloseNotificationReceiver"  android:enabled="true"  android:exported="false" /gt;  lt;meta-data  android:name="com.google.firebase.messaging.default_notification_icon"  android:resource="@drawable/emblema" /gt; lt;/applicationgt;  

Ответ №1:

Создайте дополнительную кнопку действия и PendingIntent

 val closeIntent = Intent(this, CloseNotificationReceiver::class.java)  .putExtra("ID", notificationId) val closeFlag = if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.M)  PendingIntent.FLAG_IMMUTABLE else 0 val closePendingIntent = PendingIntent  .getBroadcast(this, requestCode, closeIntent, closeFlag)  val builder = NotificationCompat.Builder(this, CHANNEL_ID)  // ...  .addAction(R.drawable.ic_close, "Close", closePendingIntent)  // ...  NotificationManagerCompat.from(this)  .notify(notificationId, builder.build())  

Затем реализуйте BroadcastReceiver для обработки закрытия Intent s

 class CloseNotificationReceiver : BroadcastReceiver() {  override fun onReceive(context: Context, intent: Intent) {  val id = intent.getIntExtra("ID", 0)  NotificationManagerCompat.from(context).cancel(id)  } }  

И объявите получателя в AndroidManifest.xml :

 lt;receiver  android:name=".CloseNotificationReceiver"  android:enabled="true"  android:exported="false" /gt;  

Комментарии:

1. почему это не работает, и что я должен написать вместо кода запроса?

2. Вы не забыли добавить приемник в AndroidManifest.xml ? Я дополнил свой ответ кодом в манифесте. Если проблема все еще будет сохраняться, пожалуйста, предоставьте полный код вашего конструктора уведомлений.

3. это работает!!! большое спасибо

Ответ №2:

Я думаю, ты, может быть, захочешь позвонить

 .setAutoCancel(true)  

на ваше NotificationCompat.Builder

Комментарии:

1. Я сделал это, но когда я нажимаю кнопку в уведомлении, она не исчезает

2. он исчезает, если я нажимаю на само уведомление, а не на кнопку в нем