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.

3 Solutions collect form web for “NotificationManager.cancel () no funciona para mí”

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; } 
  • ¿Cuál es la forma correcta de detener un servicio que se está ejecutando como primer plano
  • Adquisición de instancia del servicio de fondo
  • Lanzar una excepción personalizada de un servicio a una actividad
  • Android Polling regular de GPS en servicio, maximizando la duración de la batería
  • Icono de servicio persistente en la barra de notificaciones
  • El servicio de Android solo se inicia en modo de depuración
  • Gestión de devoluciones de llamada del servicio remoto
  • Inicio del servicio de fondo cuando se enciende Android
  • El punto de interrupción en servicio no funciona
  • Android: uso de la red en un servicio
  • Android - widget de actualización sobre el servicio con datos de la red. ¿El mejor enfoque?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.