Instalar la aplicación de forma programática desde la fuente de Android

Utilizo el código siguiente para instalar una aplicación, de mi uso que he puesto dentro del código de fuente androide.

He compilado y construido un emulador, puedo ver mi aplicación que trabaja perfecta dentro del emulador construido de la fuente de Androide.

En un punto concreto de mi aplicación, intento instalar otra aplicación desde mi aplicación. La ruta APK de la aplicación que intento instalar es:

/data/data/com.games.golf/cache/MyGames/Golf.apk 

A continuación se muestra el código que utilizo para instalar la aplicación en el camino anterior desde mi aplicación:

  private void InstallApplicaiton(String url) { PackageParser.Package mPackage = PackageUtil.getPackageInfo(Uri.parse(url)); installingList.addView(getProgressView(mPackage,url)); int installFlags = 0; PackageManager pm = getPackageManager(); try { PackageInfo pi = pm.getPackageInfo(mPackage.packageName, PackageManager.GET_UNINSTALLED_PACKAGES); if(pi != null) { System.out.println("Inside pi if not null"); installFlags |= PackageManager.INSTALL_REPLACE_EXISTING; } } catch (NameNotFoundException e) { e.printStackTrace(); } String installerPackageName = getIntent().getStringExtra( Intent.EXTRA_INSTALLER_PACKAGE_NAME); System.out.println("installerPackageName:"+installerPackageName); PackageInstallObserver observer = new PackageInstallObserver(); pm.installPackage(Uri.parse(url), observer, installFlags, installerPackageName); } private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case INSTALL_COMPLETE: System.out.println("package installed"); break; } } }; class PackageInstallObserver extends IPackageInstallObserver.Stub { public void packageInstalled(String packageName, int returnCode) { Message msg = mHandler.obtainMessage(INSTALL_COMPLETE); msg.arg1 = returnCode; mHandler.sendMessage(msg); } } 

Recibo mensaje SOP dentro del controlador de PackageInstallObserver que el paquete está instalado. Pero no puedo ver la aplicación instalada en el lanzador.

Soy consciente del hecho de que, las aplicaciones de terceros no pueden instalar / desinstalar APKs mediante programación. Por esta razón, he compilado y construido un emulador incluyendo mi aplicación, para que pueda instalar otras aplicaciones de mi aplicación. Pero aquí también cuando me quedo perplejo con el código de arriba, no tengo ni idea de la razón.

He utilizado el mismo código que android utiliza para instalar paquetes, pero por qué el código anterior no funciona y el paquete no se está instalando es lo que no soy capaz de entender.

El único problema que pude notar aquí es que String installerPackageName siempre es nulo.

Cualquier ayuda a este respecto que me ayudaría a resolver este problema, de modo que el paquete se instala desde mi aplicación, sería muy apreciado.

Editar

El siguiente es el registro. ¿Es porque eso, intento instalar esto desde el emulador y eso también desde la carpeta caché – /data/data/com.games.golf/cache . ¿Tiene algo que ver con el permiso para acceder a esta carpeta?

 05-29 19:31:57.237: W/asset(7490): Asset path /data/data/com.games.golf/cache/MyGames/Golf.apk is neither a directory nor file (type=0). 05-29 19:31:57.237: W/DefContainer(7490): Failed to parse package 05-29 19:31:57.237: W/ActivityManager(79): No content provider found for permission revoke: /data/data/com.games.golf/cache/MyGames/Golf.apk 05-29 19:31:57.297: I/ActivityManager(79): Displayed com.games.golf/.screens.PackageInstaller: +448ms 05-29 19:31:57.607: D/dalvikvm(79): GC_EXPLICIT freed 71K, 11% free 8410K/9415K, paused 4ms+7ms 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.