получить apk информацию из файла sdcard

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

не может получить значок apk, имя, версию и т.д. Я также попробовал магический номер 8192 вместо 0, но не работает. Есть ли у кого-нибудь предложения? спасибо заранее!


Я изменил свой код на это:

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

и получил выход следующим образом:

pkgName = com.chaozh.iReaderFree, appName = com.chaozh.iReaderFree, appVersion = 1.3.2.0...

как вы видите здесь, я не могу получить имя приложения, и его значок всегда является одинаковым по умолчанию. Я устал от другого установщика на рынке, и они отлично работают, поэтому кто-нибудь говорит мне, как это сделать? спасибо.

Теги:
apk

3 ответа

2
Лучший ответ

Это правильный ответ, есть некоторые трюки (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

Вы можете использовать метод PackageManager getPackageArchiveInfo для извлечения информации из файла APK. Предполагая, что ваш APK живет в корне вашей SD-карты, вы можете использовать этот код:

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

Существует много дополнительной информации, которую вы можете найти в объектах ActivityInfo и PackageInfo.

  • 0
    Значки и имена некоторых pkg отображаются правильно, но большинство их значков по-прежнему используются по умолчанию, а имена - pkgName. спасибо все то же самое.
0

Самый простой способ Просто получить значок любого приложения, используя его packageName

public static final Drawable getIconOfAppUsingPackageName(Context context,String packageName)
{
 Drawable icon = context.getPackageManager().getApplicationIcon(packageName);
 imageView.setImageDrawable(icon);
 return icon;
}
  • 0
    Попробуйте добавить некоторые объяснения. Это поможет понять логику ответа.
  • 0
    @Luca просто передайте packageName любого приложения. это даст вам appIcon.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню