Notificación personalizada de cancelación automática mediante RemoteView

He creado una notificación de diseño personalizado mediante remoteview. Problema que estoy enfrentando es, Cómo autoCancelar la notificación una vez que el usuario la toca. He intentado pocas cosas, pero ninguna es dar resultado deseado.

Encuentre el código a continuación:

RemoteViews remoteView = new RemoteViews(this.getPackageName(), R.layout.notification_layout); NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this); builder.setSmallIcon(R.drawable.ic_launcher); Intent intent = new Intent(MainActivity.this, SecondActivity.class); PendingIntent pIntent = PendingIntent.getActivity(MainActivity.this, RQST_CODE, intent, PendingIntent.FLAG_CANCEL_CURRENT); remoteView.setOnClickPendingIntent(R.id.btnNotification, pIntent); builder.setAutoCancel(true); builder.setContent(remoteView); Notification notify = builder.build(); notify.flags |= Notification.FLAG_AUTO_CANCEL; NotificationManager notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notiManager.notify(NOTY_ID, notify); 

2 Solutions collect form web for “Notificación personalizada de cancelación automática mediante RemoteView”

La forma en que logré esto es mediante la creación de BroadcastReceiver que controla los clics de botón de la Notification . Crea algo como esto:

 public class NotificationButtonListener extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int action = intent.getIntExtra("mode", -1); switch (action) { // do some things depending on action if there are more stuff to do } } } 

No olvide añadir su BroadcastListener a su archivo de manifiesto:

 <receiver android:name=".NotificationButtonListener"> 

Y puede crear una clase auxiliar para crear y cancelar la notificación:

 public class NotificationHelper { private static final int NOTIFICATION_ID = 5; private static NotificationManager mNotificationManager = null; public static void showNotification(Context context) { mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout); contentView.setOnClickPendingIntent(R.id.btn_close, closePendingIntent); Intent mMainIntent = new Intent(context, MainActivity.class); mMainIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent mMainPendingIntent = PendingIntent.getActivity(context, 555, mMainIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setTicker("Playing") .setContent(contentView) .setAutoCancel(false) .setOngoing(true) .setSmallIcon(R.drawable.ic_av_play) .setContentIntent(mMainPendingIntent); Notification notification = mBuilder.build(); mNotificationManager.notify(NOTIFICATION_ID, notification); } public static void cancelNotification() { if (mNotificationManager != null) { mNotificationManager.cancelAll(); } } } 

Y usando esa clase en su NotificationButtonListener puede llamar a NotificationHelper.cancelNotification(); .

¡Espero que esto te ayude!

Para otros que tienen un diseño personalizado y quieren cancelación automática para trabajar, Si pulsa en cualquier parte de la notificación está bien, entonces no utilice remoteView.setOnClickPendingIntent . Porque cualquier vista con OnClick Listener anula la notificación OnClick Listener principal.

Use setContentIntent en su lugar.

 NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setContentTitle("title); builder.setContentText("contect); builder.setSmallIcon(@smallicon); builder.setWhen(@when); builder.setContent(remoteViews); builder.setContentIntent(onClickPendingIntent); // use this builder.setAutoCancel(true); 
  • ¿Cómo comprobar si el usuario ha inhabilitado sonidos para las notificaciones?
  • ¿Cómo enviar a "Misceláneo" canal de notificación?
  • Texto de la barra de estado de la notificación
  • Obtenga el valor de RemoteMessage del método FCM onMessageReceived
  • La notificación push funciona incorrectamente cuando la aplicación está en segundo plano o no se está ejecutando
  • Adición de texto a un icono de notificación
  • Incorrecto timestamp en las notificaciones futuras
  • ¿Puede la notificación FCM sobre Android sobreescribir anterior?
  • Android Wear: Actividad de notificación incrustada no iniciada en el emulador
  • Icono grande ¿El mapa de bits aparece como un cuadro blanco en la notificación?
  • Cómo controlar la frecuencia de actualización de la notificación en la pantalla bloqueada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.