2011-12-14 13 views
7

necesito realizar una acción cuando mi aplicación está instalada. He investigado el uso deintención de Android cuando se instala MI aplicación

Intent.PACKAGE_ADDED 

pero no recibo el intento en la aplicación que se está instalando. Quiero ejecutar código cuando mi aplicación se instala por primera vez.

el caso de uso se está registrando con un servicio en línea. Puedo enumerarme para BOOT_COMPLETED, lo que está bien si la aplicación ya está instalada, pero debo manejar el caso cuando el usuario instale la aplicación por primera vez.

este post, Can you run an intent or script when your app gets installed on Android?

sugiere escuchar TIMER_TICK y en la primera emisión, lleve a cabo el registro y establecer un indicador a fin de no realizarlo en el siguiente TIMER_TICK. esto parece problemático porque si haces algo o no en el receptor, todavía estás iniciando tu receptor cada minuto y usando la batería en el proceso.

¿hay una mejor solución?

Respuesta

5

No hay ningún evento confiable que pueda atrapar. Incluso TIMER_TICK solo funcionará debajo de Android 3.1. De 3.1. en adelante, no puede recibir transmisiones del sistema hasta que su aplicación esté en estado activo (lo que significa que el usuario debe iniciarlo al menos una vez manualmente).

controles de lanzamiento de aplicaciones dejado de

A partir de Android 3.1, el gestor de paquetes del sistema realiza un seguimiento de aplicaciones que se encuentran en un estado detenido y proporciona un medio de el control de su lanzamiento desde los procesos de fondo y otras aplicaciones .

[...]

Tenga en cuenta que el sistema añade FLAG_EXCLUDE_STOPPED_PACKAGES a todos intentos de difusión. Hace esto para evitar las transmisiones desde servicios de fondo desde el inicio inadvertido o innecesario de componentes de las aplicaciones dejadas . [..]

aplicaciones se encuentran en un estado detenido cuando están instalados, pero primero aún no se ponen en marcha y cuando se detienen de forma manual por el usuario (en Administrar aplicaciones).

del 3.1. release notes

recomiendo para hacer su trabajo intitial cuando el usuario inicia la aplicación por primera vez.

+0

Creo que tiene un error tipográfico: ¿no debería ser su primera oración "No hay datos confiables que pueda detectar"? – CommonsWare

+0

@CommonsWare Ops, tienes razón otra vez. ¡Gracias! :) –

+1

Tenga en cuenta que si desea seguir la sugerencia de alextsc de realizar su trabajo inicial cuando el usuario inicia su aplicación por primera vez, hay una nueva transmisión exactamente para eso: [ACTION_PACKAGE_FIRST_LAUNCH] (http://developer.android.com/ reference/android/content/Intent.html # ACTION_PACKAGE_FIRST_LAUNCH). – kabuko

0

Si está dispuesto a suponer que la aplicación Google Android Market está instalada, puede usar INSTALL_REFERRER. Ver Get referrer after installing app from Android Market para más información.

+0

Esto ya no debería funcionar a partir de Android 3.1. No puede recibir transmisiones hasta que el usuario inicie su aplicación manualmente la primera vez. – CommonsWare

+0

Ah, no estaba al tanto de ese CommonsWare, gracias. ¿Esa transmisión se pondrá en cola de alguna manera y se recibirá cuando se inicie la aplicación? – kabuko

+0

Posiblemente. No he investigado eso. En general, las transmisiones no se ponen en cola, pero Market podría hacer algo especial por eso, no estoy seguro. – CommonsWare

1

Con el nuevo mercado, la intención de INSTALL_REFERRER se dispara en el momento del lanzamiento ahora para Android 3.1 y superior. Entonces podemos recibirlo en nuestra aplicación. Sin embargo, todavía se dispara en el momento de la instalación para 2.2 cuando la aplicación está en estado de detención.Entonces no puedo recibirlo en caso de Froyo.

Cuestiones relacionadas