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:

  • Errore Android @Override
  • Bloccare i marcatori della mappa per ridurre lo zoom e l'inclusione su zoom
  • Cerca più colonne DB con il dialogo di ricerca di Android
  • Eseguire una ROM personalizzata su un AVD
  • Programmazione con SurfaceView e strategia di thread per lo sviluppo del gioco
  • La navigazione in modalità immersiva diventa appiccicosa dopo la pressione del volume o riducendo al minimo il ripristino
  •  @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.