Installare APK in modo programmato – valore di return

Nella mia applicazione, chiamo un'interface javascript dalla mia attività. Nella webview associata a questa interface, chiedo all'utente di scaricare e installare un APK. Sto utilizzando un "startActivityForResult" per avviare il process di installazione (dopo il download del file). Ecco il codice:

Intent promptInstall = new Intent(Intent.ACTION_VIEW); promptInstall.setDataAndType(Uri.fromFile(new File(PATH + "app.apk")), "application/vnd.android.package-archive"); startActivityForResult(promptInstall, ACCEPT_INSTALL); 

Sto utilizzando "onActivityResult" nella class attività principale per catturare il valore restituito dall'attività di cui sopra. Ecco il codice:

  • come leggere i file .doc, .docx, .xls in android
  • Colbind automaticamente alla periferica bluetooth accoppiata quando si trova nell'intervallo
  • ffmpeg per Android (usando il tutorial: "ffmpeg e Android.mk")
  • Android - Sovrapposizione mappa onTouchEvent / onTap howto?
  • Come impostare Id del layout creato dinamico?
  • Servizio di notifica Google / Apple Push (APNS / GCM)
  •  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d("requestCode, resultCode from Install APK: ", Integer.toString(requestCode) + ", " + Integer.toString(resultCode)); } 

    Il problema che sto affrontando è che "resultCode" restituisce sempre 0, indipendentemente dal fatto che l'utente ha scelto di installare l'applicazione o di non installare l'applicazione. Ho davvero bisogno di sapere se l'utente ha installato l'applicazione o no. Qualche idea sul perché il valore restituito sia sempre 0?

    La mia ultima soluzione sarebbe quella di utilizzare packagemanager per verificare l'esistenza dell'applicazione nella function onActivityResult per determinare se l'applicazione è stata installata o no, ma vorrei sapere perché il valore restituito è sempre 0.

    Grazie mille …

    2 Solutions collect form web for “Installare APK in modo programmato – valore di return”

    Abbiamo sviluppato un mercato delle applicazioni e affrontato lo stesso problema. La nostra soluzione era usare il gestore di pacchetti come si propone.

    Ho esaminato alcuni filtri d'intenti in quanto sembra che ci siano delle intenzioni attorno al process di installazione. Ma non siamo riusciti a farla funzionare. La soluzione per i pacchetti manager funziona bene, in quanto puoi controllare la versione dell'app che è importnte per gli aggiornamenti app.

    È ansible controllare il primoInstallTime / lastUpdateTime e confrontare con il tempo di richiesta a PackageInstaller per installare il pacchetto, vedere l'esempio di seguito:

     try { PackageInfo installedPackageInfo = getPackageManager() .getPackageInfo(installedPackageName, PackageManager.GET_ACTIVITIES); long firstInstallTime = installedPackageInfo.firstInstallTime; long lastUpdateTime = installedPackageInfo.lastUpdateTime; // installationRequestTime is the time which you request for the PackageInstaller to install your package. This time should be got from System.currentTimeMillis() return firstInstallTime > installationRequestTime || lastUpdateTime > installationRequestTime; } catch (PackageManager.NameNotFoundException e) { // First time installation and user choose to not install the app return false; } 

    Questa soluzione non è graziosa, ma purtroppo PackageInstaller non fornisce un risultato chiaro a noi.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.