Notificación Acción no disparando PendingIntent

Quiero crear una Notificación que muestre el progreso de la descarga (se burla por el momento) y permite al usuario cancelar la descarga. Utilizo el generador de notifications y agrego la acción 'cancelar descarga'. Se muestra la acción, pero no envía PendingIntent onclick. Confirmé que el PendingIntent está trabajando configurando el contenidoIntent. El receptor de difusión puede get el post del clic de contenido, pero no del clic de acción.

enter image description here

DescargarServicio

val cancelIntent = Intent(applicationContext, NotificationBroadcastReceiver::class.java).apply { action = "xxx.xxx.xxx.CANCEL_DOWNLOAD" putExtra("notification_id", NOT_ID_PROGRESS) } val pendingIntent = PendingIntent.getBroadcast(applicationContext, 1, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) pendingIntent.send() val notificationBuilder = NotificationCompat.Builder(applicationContext, "updates").apply { setContentTitle("Title") setContentText("Text") setSmallIcon(R.drawable.ic_logo_full_black) setOnlyAlertOnce(true) setContentIntent(pendingIntent) addAction(NotificationCompat.Action.Builder(R.drawable.ic_delete, "Cancel", pendingIntent).build()) } startForeground(NOT_ID_PROGRESS, notificationBuilder.build()) Thread({ for (i in 0..100) { notificationBuilder.setProgress(100, i, false) notificationManager?.notify(NOT_ID_PROGRESS, notificationBuilder.build()) Thread.sleep(100L) } notificationBuilder.setProgress(0, 0, false) notificationBuilder.setContentText("Download completed") notificationManager?.notify(NOT_ID_COMPLETE, notificationBuilder.build()) onFinish() }).start() 

NotificationBroadcastReceiver

 class NotificationBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val notificationId = intent?.getIntExtra("notification_id", 0) ?: 0 Log.d(TAG, "NotificationBroadcastReceiver: notificationId = $notificationId") (context?.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?)?.cancel(notificationId) } } 

AndroidManifest.xml

 <service android:name=".services.DownloadService" /> <receiver android:name=".services.PackageDownloadService$NotificationBroadcastReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="xxx.xxx.xxx.CANCEL_DOWNLOAD" /> </intent-filter> </receiver> 

Encontré la respuesta yo mismo. Antes que nada, todo estaba configurado correctamente. Lo único que tuve que cambiar fue el intervalo de actualización de la notificación. Después de establecer el intervalo en aproximadamente 2000 ms , el evento de clic se activó al seleccionar el button de acción de anulación.

 Thread({ for (i in 0..100 step 20) { notificationBuilder.setProgress(100, i, false) notificationManager?.notify(NOT_ID_PROGRESS, notificationBuilder.build()) Thread.sleep(2000L) } notificationBuilder.setProgress(0, 0, false) notificationBuilder.setContentText("Download completed") notificationManager?.notify(NOT_ID_COMPLETE, notificationBuilder.build()) onFinish() }).start()