Recentemente ho affrontato il problema del mio processo di aggiornamento di app Android.Problema di aggiornamento dell'applicazione Android
In breve, l'app è in grado di verificare se l'aggiornamento con il codice di versione superiore è stato caricato sul server. In tal caso, l'utente decide se aggiornare. Dopo di che applicazione è caricato e installazione standard ha inizio:
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive");
startActivity(intent)
Il problema è che quando intento Android al termine dell'installazione, "teoricamente" di attività con informazioni "L'applicazione è stata installata" e 2 pulsanti "Fatto", "Apri". Ho scritto "teoricamente" perché finora mi sono imbattuto in scenari di seguito:
App è installato, "è stato installato Application" l'attività con il messaggio viene visualizzato, l'utente fa clic su "Apri" ma non succede nulla (Android 2.3 *.) o l'app si apre correttamente - questo comportamento è casuale.
L'app è installata, l'attività con il messaggio "L'applicazione è stata installata" è mostrata ma scompare improvvisamente.
Cercando di aggirare questo errore (?) Ho trovato http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED. BroadcastReceiver che ho implementato, ha avviato Launch Activity e diciamo che era una soluzione adeguata in qualche modo.
<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>
Questa soluzione ha dovuto essere modificata perché le applicazioni con API inferiore (inferiore a 12) potrebbero non gestire ACTION_MY_PACKAGE_REPLACED così ho implementato comportamento API-dipendente che:
accettati installare app udpate normalmente e lancio app da Attività con pulsante "Fatto"/"Apri" (API < 12)
ha lanciato l'app di aggiornamento tramite MyReceiver dopo aver annotato ACTION_MACK_PACKAGE_REPLACED.
Questa è la mia soluzione attuale.
Le mie domande sono:
perché aggiornate applicazione si apre in modo casuale dopo aver fatto clic su "Apri" dopo l'installazione di Android con API inferiore a 12?
perché l'attività con i pulsanti "Fine"/"Apri" scompare sui dispositivi con API superiore?
Ho provato a completare l'applicazione prima dell'installazione ma non è stato di aiuto.
La mia spiegazione è che dopo il processo di installazione, un nuovo pacchetto deve sovrascrivere quello vecchio in modo che il vecchio pacchetto debba essere semplicemente rimosso e questa è la causa principale della scomparsa dell'attività di avvio.
Come ho scritto, questa è la mia soluzione attuale e non sono soddisfatto. Se qualcuno potesse chiarire la questione, sarei molto grato.
Grazie per la lettura.
Edit:
Ok, la soluzione è molto semplice: per aggiornare successo è necessario per lanciare l'intento come nuovo compito (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);