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
- Difusión de un problema INSTALL_REFERRER de intención
- SMS no se puede prevenir usando abortBroadcast ()?
- Mi BroadcastReceiver no está recibiendo la intención BOOT_COMPLETED después de mis botas N1
- anular el registro de las llamadas de difusión antes de onReceive () listenens
- Recuperar el código de solicitud de la emisión de radio de alarma
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" />
- GCM push notificaciones en android 3.1: deshabilitar receptor de difusión
- Ir a SMS Pro sobreponiendo android.provider.Telephony.SMS_RECEIVED
- Cómo interceptar la intención de ACTION_MEDIA_MOUNTED en Android?
- Android: detecta cuando la aplicación está instalada
- El propósito del servicio debe ser explícito: Intención
- SMS enviados / entregados: ¿cómo identificas a qué SMS pertenece la emisión?
- El widget de Android funciona bien en el emulador pero en el teléfono se convierte en el widget de Google App
- Cómo bloquear una llamada de número móvil y recepción de mensajes en el desarrollo de aplicaciones Android?
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);
Pruebe a usar android.intent.action.MY_PACKAGE_REPLACED
http://developer.android.com/reference/android/content/Intent.html#ACTION_MY_PACKAGE_REPLACED