#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. он исчезает, если я нажимаю на само уведомление, а не на кнопку в нем