2012-06-07 2 views
1
 String apkPath = apk.getAbsolutePath(); 
     Log.i(getClass().getName(), "addApk(): apkPath = " + apkPath); 
     PackageInfo localPackageInfo = pm.getPackageArchiveInfo(apkPath, 0); 
     localPackageInfo.applicationInfo.sourceDir = apkPath;//! null point exception 

ne peut pas obtenir l'icône de l'apk, nom, version etc. J'ai également essayé le nombre magique 8192 au lieu de 0, mais ne fonctionne pas non plus. Quelqu'un a une suggestion? Merci d'avance!obtenir des informations apk à partir d'un fichier sdcard


j'ai changé mon code à ceci:

 PackageInfo pi = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES); 
     if (pi != null) { 
      ApplicationInfo ai = pi.applicationInfo; 
      Drawable appIcon = pm.getApplicationIcon(ai); 
      String appName = pm.getApplicationLabel(ai).toString(); 
      String appVersion = pi.versionName; 
      String pkgName = ai.packageName; 

      Log.i(getClass().getName(), "pkgName = " + pkgName + ", appName = " + appName + ", appVersion = " + appVersion); 
      adapter.add(new InstallItem(pkgName, appIcon, appName, appVersion)); 
     } 

et a obtenu la sortie comme ceci:

pkgname = com.chaozh.iReaderFree, appName = com.chaozh.iReaderFree, appVersion = 1.3 .2.0 ...

comme vous le voyez ici, je ne peux pas obtenir le nom de l'application et son icône est toujours la même icône par défaut. J'ai fatigué autre installateur sur le marché et ils fonctionnent très bien, alors quelqu'un me dire comment faire? THX.

Répondre

2

Cette présente la bonne réponse, il y a quelques trucs (SDK> 8!):

public Drawable getApkIcon(String path){  
    PackageManager pm = getPackageManager();  
    PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);  
    if(info != null){  
     ApplicationInfo appInfo = info.applicationInfo; 

     if(Build.VERSION.SDK_INT >= 8){ 
      appInfo.sourceDir = path; 
      appInfo.publicSourceDir = path; 
     } 

     return appInfo.loadIcon(pm); 
    }   
    return null; 
} 
4

Vous pouvez utiliser la méthode PackageManager getPackageArchiveInfo pour récupérer les informations d'un fichier APK. En supposant que votre vie APK à la racine de votre carte SD, vous pouvez utiliser ce code:

String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() 
        + "/MyApp.apk"; 
    PackageManager pm = getPackageManager(); 

    PackageInfo info = pm.getPackageArchiveInfo(apkPath, 
          PackageManager.GET_ACTIVITIES); 
    //Log.i("ActivityInfo", "Package name is " + info.packageName); 

    for (android.content.pm.ActivityInfo a : info.activities) { 
     Log.i("ActivityInfo", a.name); 
    } 

Il y a beaucoup d'informations supplémentaires vous pouvez trouver dans les objets ActivityInfo et PackageInfo.

+0

certains Les icônes et les noms de pkg sont correctement affichés, mais la plupart de leurs icônes sont toujours par défaut et les noms sont pkgName. merci tout de même. – thecr0w

0

manière la plus simple obtenir simplement l'icône d'une application utilisant son packageName

public static final Drawable getIconOfAppUsingPackageName(Context context,String packageName) 
{ 
Drawable icon = context.getPackageManager().getApplicationIcon(packageName); 
imageView.setImageDrawable(icon); 
return icon; 
} 
+0

Essayez d'ajouter quelques explications. Cela aiderait à comprendre la logique derrière la réponse. – Luca

+0

@Luca vient de passer packageName de n'importe quelle application. cela vous donnera l'appIcon. – Nepster

+0

cela ne fonctionne que pour l'application installée. op veut des informations d'application à partir d'un apk dans le système de fichiers (sdcard pour être plus précis). – Thupten

Questions connexes