2012-09-20 15 views
6

Tengo una notificación de servicio de primer plano que cuando se hace clic debe iniciar una actividad. Esta actividad tiene una vida muy corta antes de llamar a finish().Notificación pendiente Contenido subyacente Intento falla cuando finaliza llamada de actividad()

La primera vez que se hace clic en la notificación funciona, la segunda vez y después de eso me sale el error:

Sending contentIntent failed: android.app.PendingIntent$CanceledException 

En mi código al crear la notificación de servicio de primer plano, he cambiado el randomActivity.class a otra clase de actividad que no se llama finalizar y funciona perfectamente en cada clic. De:

Intent notificationIntent = new Intent(this, RandomActivity.class); 

a:

Intent notificationIntent = new Intent(this, HomeActivity.class); 

funciona bien ...

He utilizado el código de notificación estándar desde el sitio web de desarrolladores de Android, así como pruebas de que el uso de constructor de notificación. Obtengo el mismo resultado independientemente. Funciona perfectamente a menos que la Actividad llame a finish();

¿Es este comportamiento esperado, un error o me falta algo?

Gracias de antemano por su ayuda y espero que la solución!

Nota: El código de notificación que uso es completamente estándar, así que no lo he publicado. RandomActivity llama a finish(); en onCreate, por lo que no hay nada inusual para ver allí tampoco.

Respuesta

9

Después de probar todo lo que pude, finalmente encontré una solución. Publicación en caso de que alguien tropiece con este problema también.

Tuve que hacer coincidir el int requestCode con el ID de notificación. ¿Por qué? Absolutamente ninguna idea ... ¿Solo puedo suponer que impide que los datos intencionales se vuelvan nulos o se reutilicen?

private static int ONGOING_NOTIFICATION_ID = 76; 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

El mismo que el identificador de notificación a startForeground:

this.startForeground(ONGOING_NOTIFICATION_ID, not); 

Espero que esto ayude a alguien.

+0

Estoy de acuerdo con @brandall. Si está utilizando botones de acción, el ID de notificación aún debe usar el código de solicitud del contentIntent y no de ninguno de los intentos de acción. – fahmad6

2

No necesité comprobar la identificación de la notificación (como sugirió), pero tuve que cambiar la bandera a FLAG_UPDATE_CURRENT, en lugar de FLAG_ONE_SHOT.

Con FLAG_ONE_SHOT, el intento pendiente se cancela una vez entregado, y después de eso, ninguna cantidad de tocar la notificación permitirá que el mismo intento pendiente sea entregado nuevamente, de ahí la excepción.

Este fue el problema para mí.

Cuestiones relacionadas