2010-04-21 19 views
9

¿Hay alguna manera de obtener una notificación del sistema cuando se desinstala una aplicación?Detectar si se desinstaló una aplicación

Me gustaría mantener una tabla con la información de todos los clientes que actualmente usa mi aplicación. Sin embargo, eso parece imposible si no hay forma de detectar este evento.

La primera solución que puedo pensar es tener un servicio siempre en ejecución en segundo plano para escuchar android.intent.action.PACKAGE_REMOVED. Pero, ¿se eliminaría ese servicio una vez que el proceso de desinstalación haya finalizado o se detendrá justo antes de que el proceso haya comenzado? Además, incluso si se trata de una solución, tiene el potencial de desanimar a muchas personas cuando se dan cuenta de que parte de la aplicación se está ejecutando en segundo plano.

¿Alguna sugerencia? ¡Gracias!

+0

¿Podría encontrar alguna solución al problema? –

Respuesta

6

Simplemente puede hacerlo al revés y mantener una tabla de usuarios que usan activamente su aplicación. Simplemente llame a un servicio web en un punto del programa que muestre que está activo. Si una aplicación no se utiliza durante un tiempo determinado, márquela como inactiva.

6

El documentation for the PACKAGE_REMOVED action dice lo siguiente:

El paquete que se está desinstalando qué no reciben esta intención.

Para que pueda monitorear otras aplicaciones que se desinstalan pero no las suyas.

Así que probablemente necesite rastrear quién todavía está usando su aplicación, no quién ha dejado de usarla. Si no quiere que la sobrecarga de tener su propio servidor haga esto, puede usar un servicio gratuito como Flurry.

+1

Quién ha usado mi aplicación recientemente no es una medida precisa, y esto no satisface mis necesidades. Estoy usando GAE, así que no estoy preocupado por el lado del servidor. – mobilekid

+0

¿Cómo se supervisa la desinstalación de la aplicación con ráfagas? Esto es exactamente lo que necesito, pero realmente no puedo descubrir cómo hacer esto. – mkorszun

1

A partir del documento Android, la aplicación desinstalado por el usuario no puede obtener No

Intent.ACTION_PACKAGE_REMOVE 

, pero podemos utilizar otro método para implementar esta característica. Todos sabemos que hay un directorio nombrado con el nombre de su paquete en el directorio/datos/datos después de que el usuario instaló su aplicación. Si el usuario desinstala su aplicación, el sistema eliminará el directorio raíz de su aplicación (/data/data/com.example.yourappname). La acción de eliminación ocurre inmediatamente cuando el usuario hace clic en "desinstalar" y el administrador del paquete del sistema eliminará el directorio.

Por lo tanto, podemos controlar la existencia del directorio de datos de su aplicación (que generalmente es /data/data/com.example.yourappname) para detectar si su aplicación fue desinstalada por el usuario.

Para supervisar este directorio, tenemos que bifurcar un proceso separado de JNI. En este nuevo proceso de fork, podemos utilizar el sistema Linux api inotify (7) o access (3) para determinar la existencia del directorio de datos de la aplicación.

Here es una implementación viable. Pero obtuvo el problema de permiso cuando intenta enviar un intento para iniciar el navegador del sistema en la versión alta del dispositivo Android. No tengo idea de cómo evitar esto. Sin embargo, el ejemplo anterior es suficiente para su pregunta.

Espero que sea útil!

0

Android no proporciona una función incorporada para rastrear la desinstalación de la aplicación.

La notificación se puede utilizar como una forma alternativa de rastrear la desinstalación de la aplicación. Para esta notificación de envío en la aplicación y realizar un seguimiento del estado de la notificación. Cuente el número de notificaciones no entregadas para un período de tiempo en particular. Si el estado de la notificación no entregada no cambia en ese período de tiempo en particular, considere que la aplicación se ha desinstalado del dispositivo.

Por ejemplo, he utilizado un script cron que se ejecuta cada 3 días y verifica el estado de las últimas 10 notificaciones entregadas al dispositivo (se envían 2 notificaciones en un día). Si todas estas 10 notificaciones tienen el estado "no entregado", entonces se considera que la aplicación se desinstaló del dispositivo.

Cuestiones relacionadas