actualizar mi aplicación

Estoy desarrollando una aplicación Android no pública, es decir, la aplicación no estará disponible en el Android Market global. La aplicación se instalará en un número limitado de clientes, por ejemplo, utilizando un archivo apk. Tengo un archivo .apk en la tarjeta SD y estoy intentando actualizar mi aplicación desde mi aplicación. Para eso, estoy usando la intención

Mi código

Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+"/" +"Test.apk")), "application/vnd.android.package-archive"); startActivity(intent); 

NOTA: Está funcionando bien, pero después de actualizarlo, la aplicación se cerrará.

La pregunta es " ¿Cómo prevenir esto? "

También utilizo el receptor de difusión para volver a abrir mi aplicación.

 public class AutoStart extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){ Intent i = new Intent(context, ABCActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); }else{ Intent i = new Intent(context, XYZActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } 

Problema 1: – No se puede volver a abrir la actividad cuando

"android.intent.action.PACKAGE_ADDED",

"android.intent.action.PACKAGE_INSTALL",

"android.intent.action.PACKAGE_CHANGED"

 <receiver android:name=".AutoStart" android:enabled="true" android:exported="true" > <intent-filter android:priority="100" > <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_INSTALL" /> <data android:scheme="package" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_CHANGED" /> <data android:scheme="package" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REPLACED" /> <data android:scheme="package" /> </intent-filter> </receiver> 

"android.intent.action.BOOT_COMPLETED" Trabajando Correctamente

Permisos dados

 1 > <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 2 > <uses-permission android:name="android.permission.RESTART_PACKAGES" /> 3 > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

desafortunadamente no se puede impedir que el proceso se termine cuando se reinstale, y por otro lado – nunca recibirá ninguna difusión si es su propia aplicación que se ha reinstalado en ese momento.

si tuviera que implementar tal característica, resolvería el problema como esto:

truco número 1:

la creación de otra aplicación (que se instalaría de alguna manera también en el dispositivo de su usuario) que sólo rollo es actuar como una especie de "watch-dog": esta aplicación escucharía las emisiones de instalación, y porque es la aplicación diferente, instalado – no tendrá problema para lanzar a la "aplicación original".

por supuesto, no se olvide que el usuario tendrá que "lanzar" al menos unos esta aplicación de perro de vigilancia, ya que desde android 4 receptores no funcionará hasta que el proceso de la aplicación comenzó por lo menos los de. eso es por razones de seguridad

truco número 2:

otra opción sería registrarse en manifest you app también a ACTION_TIME_TICK broadcast. usted puede contar con esta emisión a ser llamada cada número de segundos, e implementar cuando recibe alguna lógica que reconocen si la aplicación ahora mismo necesita iniciar la actividad principal o no.

este enfoque funcionará, pero de las actuaciones la razón no sería tan buena – porque el proceso de la aplicación estaría vivo casi todo el tiempo porque reacciona a esa emisión. si usted no cuida sobre eso – así que no problema

truco número 3:

proporcione pendingIntent a alarmManager justo antes de iniciar la actividad de instalación a 30-50 segundos después. la intención pendiente mantendrá la intención de volver a iniciar su aplicación.

suponiendo que la aplicación se instalaría hasta entonces – que funcionaría.

La respuesta aceptada es incorrecta.

Simplemente puede agregar FLAG_ACTIVITY_NEW_TASK a la intención, que inicia el instalador. De esta manera el instalador se ejecutará en un proceso separado y no se matará después de reemplazar el paquete con la nueva versión.

 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+"/" +"Test.apk")), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 
  • Establecer extras para BroadcastReceiver de DownloadManager
  • Android no está recibiendo Intent ACTION_PACKAGE_REMOVED en el paquete eliminado
  • ¿Por qué no funciona LocalBroadcastManager en lugar de Context.registerReceiver?
  • Android obtener el nombre del proceso dentro de BroadcastReceiver
  • ¿Cómo reproducir archivos de audio cuando se inicia la llamada?
  • BroadcastReceiver para CONNECTIVITY_ACTION devuelve siempre null en intention.getExtras ()
  • Cómo abortar BroadcastReceiver en android
  • Difusión en contacto agregar / cambiar?
  • AlarmManager: cómo programar una alarma diaria y hacer frente a cambios de tiempo
  • Error al recibir el problema de intento de difusión
  • GCM no recibe el mensaje de abajo Android 4
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.