Problema de actualización de la aplicación para Android

Recientemente he estado enfrentando el problema de mi proceso de actualización de la aplicación de Android.

En resumen, la aplicación es capaz de comprobar si la actualización con el código de versión superior se ha cargado en el servidor. Si es así, el usuario decide actualizar. Después de que la aplicación se carga y comienza la instalación estándar:

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

El problema es que cuando Android Intent finaliza la instalación, la actividad "teóricamente" con la información "La aplicación se instaló" y 2 botones "Listo", "Abierto". Escribí "teóricamente" porque hasta ahora he encontrado escenarios a continuación:

  1. La aplicación está instalada, se muestra la actividad con el mensaje "Se ha instalado la aplicación", el usuario hace clic en "Abrir", pero no ocurre nada (Android 2.3. *) O la aplicación se abre correctamente: este comportamiento es aleatorio.

  2. La aplicación está instalada, se muestra la actividad con el mensaje "La aplicación se instaló" pero de repente desaparece.

Tratando de eludir este error (?) Encontré http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED . BroadcastReceiver que implementé, comenzó Launch Activity y digamos que era una solución adecuada de alguna manera.

  <receiver android:name=\".MyReceiver\" > <intent-filter> <action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" /> //Or from API 12 <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> 

Esta solución tuvo que ser modificada porque las aplicaciones con una API inferior (inferior a 12) no podían manejar ACTION_MY_PACKAGE_REPLACED por lo que implementé un comportamiento dependiente de API que:

  • Permitió instalar la aplicación udpate normalmente y lanzar la aplicación desde la actividad con el botón "Listo" / "Abrir" (API <12)

  • Lanzó la aplicación de actualización a través de MyReceiver después de ACTION_MY_PACKAGE_REPLACED anotando.

Esta es mi solución actual.

Mis preguntas son:

  • ¿Por qué la aplicación actualizada se abre al azar después de hacer clic en "Abrir" después de la instalación en android con API inferior a 12?

  • ¿Por qué la actividad con los botones "Hecho" / "Abrir" desaparece en los dispositivos con una API más alta?

Intenté terminar applicattion antes de instalar pero no ayudó.

Mi explicación es que después del proceso de instalación, un nuevo paquete tiene que sobrescribir el antiguo para que el paquete antiguo tenga que ser simplemente eliminado y esta es la causa principal de la desaparición de la actividad de lanzamiento.

Como escribí, esta es mi solución actual y no estoy satisfecho. Si alguien pudiera aclarar el asunto, estaría muy agradecido.

Gracias por leer.

Editar:

Ok, la solución es muy simple: a la actualización exitosa es necesario lanzar el Intent como nueva tarea (arrrgh …):

 final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

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