9

La mia applicazione Android ha un'opzione per l'aggiornamento alla versione più recente, la versione più recente APK lo tengo disponibile sotto un percorso in sdcard. Al clic dell'opzione Upgrade invoco il seguente metodo.Programma di installazione del pacchetto Android: come ottenere "Apri" e "Fatto" e il risultato dell'attività entrambi?

public static void launchInstaller(Activity act, String apkPath) 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     act.startActivityForResult(intent, 0); 
    } 

Il motivo per cui includo FLAG_ACTIVITY_NEW_TASK, è perché, dopo upgradation, voglio avere & opzioni "Open" "Fatto", che non vengono mostrati se io non uso questo flag.

Quando il codice precedente avvia il programma di installazione del pacchetto, ha due opzioni OK & Annulla, quando l'utente preme Annulla, desidero sapere che l'utente lo ha annullato. Ma non sono in grado di sapere perché l'onActivityResult è chiamato pre-maturato. Vengo a una ragione per cui sta succedendo dopo aver letto i seguenti post.

Android - startActivityForResult immediately triggering onActivityResult

onActivityResult() called prematurely

mi chiedono di fare in modo che l'intento che sto usando per lanciare l'attività non ha FLAG_ACTIVITY_NEW_TASK impostato su di esso. Vedi qui:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

In particolare nota: "Questa bandiera non può essere utilizzato quando il chiamante è richiedendo un risultato da attività in fase di lancio."

Se l'attività è stata lanciata come parte di una nuova attività, allora Android immediatamente chiamare l'onActivityResult() con RESULT_CANCELED perché un'attività in uno compito non può restituire risultati ad un altro compito, solo le attività della stessa compito può farlo.

Ma nel mio caso, non riesco a rimuovere FLAG_ACTIVITY_NEW_TASK, perché altrimenti non otterrò le opzioni "Apri" e "Fatto" per l'aggiornamento riuscito.

Qualcuno ha avuto problemi simili? Gentilmente aiutami, perché mi fa impazzire.

+0

Ho lo stesso problema ... hai ricevuto risoluzione per questo? – Himanshu

risposta

3

È necessario utilizzare l'intento di trasmissione aggiunto al pacchetto. Crea un ricevitore di trasmissione ascolta package added. Se il pacchetto aggiunto è uguale al tuo pacchetto, l'utente conferma installa altrimenti ignora il processo di installazione. Se chiedi quali extra possono essere restituiti da Android, Android restituisce EXTRA_UID sul pacchetto. Il metodo di PackageManager converte uid in pacchetto. (GetPackagesForUid (int uid) restituisce array di stringhe, ma solitamente restituisce un elemento dell'array in breve di solito lunghezza dell'array uguale a 1.

Problemi correlati