2013-07-23 14 views
8

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:

  1. 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.

  2. 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); 

risposta

0

primo luogo, aggiungere 'intent-filtro 'a manifesto come come segue:

`<activity android:name="com.package.MainActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <data android:scheme="file" /> 
     <data android:mimeType="application/vnd.android.package-archive" /> 
    </intent-filter> 
</activity>` 

Quindi, impostare le bandiere intenti per nuova attività:

intentAPK.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Problemi correlati