2011-12-23 3 views
0

J'essaye d'installer apk par programme de la carte SD sans mentionner le nom de l'apk. Ce que je peux faire maintenant, c'est que je peux installer l'apk que j'ai nommé dans mon code. Mais ce n'est pas pratique si je veux avoir une autre apk installée sur mon appareil et pour cela je dois aller dans mon code et changer le nom de l'apk. Est-il possible d'obtenir le nom du fichier apk dynamiquement au moment de l'exécution? Par exemple obtenir une liste de apk installable, de sorte que l'utilisateur peut choisir celui à installer?l'installation apk programmattiquement sans définir le nom apk

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(
Uri.parse("file:///mnt/sdcard/extsd/download /app.apk"), 
"application/vnd.android.package-archive"); 
startActivity(intent); 

Merci à l'avance "!!! Joyeux Noël !!! à tous les développeurs et les téléspectateurs

Répondre

2

Mise à jour:. Le code précédent a été supprimé car contenir des erreurs est ici un code de travail.

public class InstallAPKActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ExtFilter apkFilter = new ExtFilter("apk"); 
     File file[] = Environment.getExternalStorageDirectory().listFiles(apkFilter); 
     Log.d("InstallApk", "Filter applied. Size: "+ file.length); 

     for (int i=0; i < file.length; i++) 
     { 
      Log.d("InstallApk", "FileName:" + file[i].getName()); 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.fromFile(file[i]), "application/vnd.android.package-archive"); 
      startActivity(intent); 
     } 





    } 

    class ExtFilter implements FilenameFilter { 
     String ext; 
     public ExtFilter(String ext) { 
      this.ext = "." + ext; 
     } 
     public boolean accept(File dir, String name) { 
      return name.endsWith(ext); 
     } 
    } 
} 

Mise à jour 2:.. Ce programme énumère simplement tous les fichiers apk et les écrit au tableau de fichiers Après cela, il tente d'installer tous ces fichiers APK séquentiellement, par exemple, dans mon cas, je mets golddream.apk d'application sur une carte SD de mon émulateur. SDK développé pour v 10. Je vois la sortie suivante dans mon logcat:

12-21 06:44:39.453: D/InstallApk(14897): Filter applied. Size: 1 
12-21 06:44:39.453: D/InstallApk(14897): FileName:golddream.apk 
12-21 06:44:39.463: I/ActivityManager(62): Starting: Intent { act=android.intent.action.VIEW dat=file:///mnt/sdcard/golddream.apk typ=application/vnd.android.package-archive cmp=com.android.packageinstaller/.PackageInstallerActivity } from pid 14897 
12-21 06:44:40.073: I/ActivityManager(62): Displayed com.android.packageinstaller/.PackageInstallerActivity: +578ms (total +1s229ms) 
+0

Uri.parse (fichier [i] .getAbsolutePath(), "application/vnd.android.package-archives")); erreur sous analyse, il est dit d'enlever l'argument pour correspondre à la chaîne d'analyse. et la variable i est non déclarée. doit-il être variable de classe ou local? – chandanmahmud

+0

Merci beaucoup pour votre réponse. C'était simplement appréciable. Il n'y a pas d'erreur dans le code maintenant. Est-il possible de tester le code dans l'émulateur? – chandanmahmud

+0

Oui, je l'ai testé sur mon émulateur parce que je n'ai pas de vrai téléphone) – Yury