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); 

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); 
  • Cancelar la notificación al eliminar la aplicación del panel multitarea
  • Android: PendingIntent de la notificación no activa el onCreate () si se vuelve a activar la actividad en la pantalla
  • Notificación para abrir Android Market
  • Cómo abrir la página de fragmentos, cuando se presiona una notificación en android
  • NotificationListenerService no leer texto de notificaciones apiladas
  • Color androide del fondo de la notificación del lollipop
  • Actualizar el texto de la notificación, no la notificación completa
  • Notificación de Android no se rechaza al hacer clic / deslizar
  • Cambiar el fondo del icono de notificación en Lollipop
  • ¿Cómo crear una notificación sin icono en la barra de estado o simplemente ocultarlo?
  • ¿Cómo expandir la notificación de InboxStyle con sólo una línea añadida?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.