2011-05-27 5 views
4

Dans mon application, j'appelle une interface javascript de mon activité. Dans la vue Web associée à cette interface, je demande à l'utilisateur de télécharger et d'installer un fichier APK. J'utilise un "startActivityForResult" pour démarrer le processus d'installation (après avoir téléchargé le fichier). Voici le code:Installer le programme par programme - renvoyer la valeur

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

J'utilise « onActivityResult » dans la classe principale d'activité pour capturer la valeur de retour de l'activité ci-dessus. Voici le code:

@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)); 
} 

Le problème que je suis face est que « resultCode » retourne toujours 0, indépendamment du fait que l'utilisateur a choisi d'installer l'application ou non installer l'application. J'ai vraiment besoin de savoir si l'utilisateur a installé l'application ou non. Des idées sur la raison pour laquelle la valeur de retour est toujours 0?

Mon dernier recours serait d'utiliser packagemanager pour vérifier l'existence de l'application dans la fonction onActivityResult pour déterminer si l'application a été installée ou non, mais je voudrais savoir pourquoi la valeur de retour est toujours 0.

Merci beaucoup ...

+1

Je suis aussi confronté au même problème et c'est ridicule – tasomaniac

Répondre

3

Nous avons développé un marché d'applications et fait face au même problème. Notre solution consistait à utiliser le gestionnaire de paquets comme vous le proposez.

J'ai regardé dans certains filtres d'intention car il semble y avoir quelques intentions autour du processus d'installation. Mais nous n'avons pas réussi à le faire fonctionner. La solution de gestionnaire de paquets fonctionne bien, car vous pouvez vérifier la version de l'application qui est importante sur les mises à jour de l'application.

+0

Merci pour la réponse. Je vais finir par utiliser PackageManager pour vérifier si l'utilisateur a installé l'application ou non. – TheJag

2

Vous pouvez vérifier les firstInstallTime/LastUpdateTime et comparer avec votre temps de demande de PackageInstaller pour installer votre package, voir exemple ci-dessous:

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; 
} 

Cette solution est pas jolie, mais malheureusement PackageInstaller don ne fournissons pas de résultat clair pour nous.

Questions connexes