sigue - Android GCM(notificación de inserción): el dispositivo no recibe notificación si la aplicación se detiene
lamentablemente la aplicacion se detuvo android solucion (3)
Este tipo de receptores de radiodifusión deberían recibir mensajes incluso si mi aplicación está cerrada (no solo si mi aplicación está en segundo plano, sino también si fue detenida).
Si un usuario fuerza su aplicación desde la Configuración, nunca más se ejecutará su código, hasta que algo ejecute manualmente uno de sus componentes, normalmente el usuario inicia una actividad manualmente (a partir de Android 3.1). Por lo tanto, si el usuario fuerza su aplicación desde Parámetros, no recibirá mensajes GCM en dispositivos / emuladores más nuevos.
Entonces, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive () se invocará en el receptor de difusión) solo si se está ejecutando o en segundo plano (pero no está cerrado)?
No hay un concepto de "cerrado" en Android desde el punto de vista de una aplicación. Si, por "cerrado", quiere decir que "no tiene un proceso en ejecución, donde el último proceso se terminó normalmente", entonces sí, debería recibir mensajes GCM y otras transmisiones. Pero, nuevamente, la parada de fuerza no se "termina normalmente".
Uso notificaciones automáticas (GCM) en mi proyecto de Android.
De acuerdo con el tutorial de GCM, implementé el receptor de difusión y lo AndroidManifest.xml
en AndroidManifest.xml
.
Este tipo de receptores de radiodifusión deberían recibir mensajes incluso si mi aplicación está cerrada (no solo si mi aplicación está en segundo plano, sino también si fue detenida).
Pero no funciona como espero. onReceive()
método onReceive()
no se llama si la aplicación está cerrada. Parece que mi comprensión de los receptores de transmisión es correcta y el problema está en mis expectativas sobre GCM.
Una de las posibles razones es que el servidor de google ni siquiera envía una notificación al dispositivo si la aplicación está cerrada. Entonces, ¿es correcto que mi aplicación pueda recibir un mensaje (y el método onReceive()
se invocará en el receptor de difusión) solo si se está ejecutando o en segundo plano (pero no está cerrado)?
Gracias por adelantado.
En la documentation dice que:
Una aplicación de Android en un dispositivo Android no necesita estar en ejecución para recibir mensajes. El sistema activará la aplicación de Android a través de Intent Broadcast cuando llegue el mensaje, siempre y cuando la aplicación esté configurada con el receptor y los permisos adecuados.
Compruebe la implementación y los permisos de su receptor de difusión.
Según Francesco Nerieri en este hilo android-gcm :
Entonces, si fuerza la detención de la aplicación, el comportamiento previsto para ICS es que la aplicación no reciba el mensaje. En JB, esto significa que GCM también anulará el registro de la aplicación, este es un comportamiento desafortunado y estamos trabajando para cambiar esto (la parte de desregistro en JB).