NotificationManager.cancel () no funciona para mí

He estado intentando durante horas eliminar una Notificación persistente establecida por un Servicio usando:

startForeground(1337, notification); 

El código que estoy usando para cancelarlo:

 NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); nManager.cancel(1337); // cancel existing service notification, doesn't take effect nManager.cancelAll(); //surpluous, but also doesn't take effect 

¿Que me estoy perdiendo aqui? Estoy desconcertado.

Para aclarar por qué estoy haciendo esto: el servicio comienza con una notificación persistente predeterminada. Cuando mi aplicación se ejecuta, debe reemplazar esta notificación por otra. Usar notify() en la notificación existente funciona perfectamente, sin embargo, necesito que muestre el texto del ticker para la nueva notificación también. Esta es la razón por la cual decidí eliminar la notificación existente (usando el código anterior), crear una nueva, y luego llamar a startForeground() nuevo y pasar la nueva notificación a ella, por lo que mi servicio persiste.

El problema es que está emitiendo la notificación de forma indirecta mediante startForeground() . No puede cancelar esa notificación por la misma razón por la que el sistema insiste en que proporciona una notificación al iniciar un servicio de primer plano. Mientras su Servicio de primer plano esté funcionando, esa Notificación estará allí.

En la mayoría de los casos, los servicios realmente no deben estar en primer plano. Si puede utilizar una prioridad normal para su Servicio, entonces puede iniciar y detener su Notificación normalmente.

Si realmente está haciendo algo que realmente requiere un servicio de primer plano, y si realmente desea mostrar al usuario un texto de ticker, creo que su única opción es emitir otra Notificación.

Siempre puede quitar la notificación de un servicio de primer plano mediante callng stopForeground (boolean removeNotification). Entonces un servicio sale de su estado de primer plano y una vez más puede ser matado por el sistema cuando la memoria es necesaria.

Puede actualizar la notificación pasando un Builder vacío.

 if(showNotification){ NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setVisibility(Notification.VISIBILITY_SECRET) .setSmallIcon(R.mipmap.ic_spotify_white_24dp) .setTicker("Playing Now") .setContentTitle("Spotify") .setContentText("Preview"); return mBuilder; }else{ NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); return mBuilder; } 
  • Grabación de errores en vídeos android
  • El servicio de fondo de Android se está reiniciando cuando se cancela la aplicación
  • Servicio con cola de prioridad en Android
  • Llamar a getLayoutInflater () en lugares que no están en actividad
  • ¿Cómo mantener un servicio con los oyentes vivo después de desatar en Android?
  • Revisión 2: Cómo pasar los datos de un servicio de fondo / subproceso a alguna otra actividad que no sea MainActivity que creó el servicio de fondo
  • ¿Cómo reiniciar automáticamente un servicio incluso si la fuerza del usuario lo cierra?
  • Android Polling regular de GPS en servicio, maximizando la duración de la batería
  • Cómo reiniciar el servicio después de que la aplicación sea eliminada de las tareas recientes
  • Diseño de hilos múltiples de Android Service
  • ¿Cómo eliminar todas las notificaciones cuando se cancela una aplicación de Android (actividad o servicio)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.