2010-04-14 19 views
15

Me gustaría saber si es posible activar mediante programación la instalación de un APK que está en la tarjeta?instalación automática de apk

+4

¿Quieres decir como un virus? –

+0

No, planeo actualizar mi aplicación de esta manera. Descargue la nueva aplicación de mi sitio web y luego instálela automáticamente. – rantravee

+0

¿Es así como las cosas ya funcionan? Si un usuario tiene marcada la opción "Instalar aplicaciones que no son de mercado", simplemente busca el enlace de descarga y, luego de una descarga exitosa, ¿la aplicación se instala automáticamente? – Samuh

Respuesta

20
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent); 

(cortesía de anddev.org)

+0

a veces funciona, a veces informa que no pudo encontrar el archivo AndroidManifest y cancela la instalación – rantravee

+0

Esto sugiere que quizás esté llamando 'startActivity()' antes de que el APK descargado se descargue por completo a el flash o algo así Me gustaría probar la implementación de este un paso a la vez, comenzando con el uso de 'startActivity()' en un APK se pone manualmente en la tarjeta SD (por ejemplo, empujar ADB, DDMS Administrador de archivos, montar/arrastre/desmontar desde el equipo de desarrollo). Una vez que esté funcionando como lo desea, mezcle el mecanismo de descarga. – CommonsWare

+0

De hecho, ese es el caso del que estoy hablando. Sin embargo, observé que si el apk está en la tarjeta sd/descarga, está instalado, pero si lo coloca en la tarjeta sd generará este error 04-15 16: 51: 02.686: ERROR/filemap (215): mmap (0,0) failed: argumento inválido 04-15 16: 51: 02.686: WARN/zipro (215): no se puede asignar '/sdcard/myapk.apk': argumento inválido 04-15 16: 51: 02.695: DEPURAR/activo (215): no se pudo abrir el archivo Zip '/sdcard/myapk.apk' 04-15 16: 51: 02.695: DEPURACIÓN/mapa de archivos (215): munmap (0x0, 0) falló aunque la ruta sea : INFO/mytag (196): la ruta de instalación es: ///sdcard/myapk.apk – rantravee

0

ver si esto puede ayudar: install Apk via Intent. No estoy seguro de si este es el camino a seguir.

+0

ha usado antes? En caso afirmativo, especifique qué "paquete", "xxx" consulte en? Uri installUri = Uri.fromParts ("paquete", "XXX", null); – rantravee

+0

@Samuh: el sitio del código anterior está inactivo –

4

Sólo en caso de que alguien está buscando a esta información .... Si desea instalar un APK que también mediante programación descargado y almacenado en sus "archivos" privados (carpeta. /data/data/com.yourapp.name/files es decir, ""), que necesita para obtener la URI de la ruta completa usando primero getFileStreamPath de la siguiente manera:

File fullPath = getFileStreamPath("name_of_downloaded_app.apk"); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(fullPath), "application/vnd.android.package-archive"); 
startActivity(intent); 

Espero que esto ayude ...