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; } 
  • Crear notificación cada día
  • Ejecutar servicio incluso si la aplicación está cerrada (matado)
  • Cómo llamar al método en servicio de otra actividad
  • Android - ¿Cómo decidir si ejecutar un servicio en un proceso separado?
  • Descubrimiento del servicio de red error de tutorial android: Servicio perdido, el teléfono se desactiva
  • Depuración de fallos de servicio
  • Android: superposición en la ventana sobre las actividades de una tarea
  • Servicio de Android que no recibe Actualizaciones de ubicación
  • Animar ImageView dentro de WindowManager en un servicio de Android
  • OnServiceConnected nunca llamado después del método bindService
  • Android: uso de la red en un servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.