获取apk文件图标,版本,名称

问题描述

|| 对于尚未安装的软件包,有什么方法可以获取应用程序名称,应用程序版本和应用程序图标? (用于sdcard上的一些apk文件)     

解决方法

我可以使用
getPackageArchiveInfo(archiveFilePath,flags)
getApplicationIcon (ApplicationInfo info)
获取apk图标,版本,名称     ,我花了比我允许的更多的时间来寻找解决方案..找到了! :) :) 徘徊于此参考资料之后: http://code.google.com/p/android/issues/detail?id=9151 我发现了从尚未安装的.apk文件中获取图标和名称(即标签)的技巧。 我希望现在帮助他人还为时不晚:
 String APKFilePath = \"mnt/sdcard/myapkfile.apk\"; //For example...
 PackageManager pm = getPackageManager();
 PackageInfo    pi = pm.getPackageArchiveInfo(APKFilePath,0);

 // the secret are these two lines....
 pi.applicationInfo.sourceDir       = APKFilePath;
 pi.applicationInfo.publicSourceDir = APKFilePath;
 //

 Drawable APKicon = pi.applicationInfo.loadIcon(pm);
 String   AppName = (String)pi.applicationInfo.loadLabel(pm);
经过轻度测试后,它似乎起作用了。     ,我试过了:
PackageInfo info = getPackageManager().getPackageArchiveInfo(fullPath,0);
ApplicationInfo appinfo = info.applicationInfo;
label = getPackageManager().getApplicationLabel(appinfo).toString();
img = getPackageManager().getApplicationIcon(info.packageName);
但是,如果未安装apk,则此代码将无效。     ,
// Install a known apk file from the SD-Card
// or launch it if installed. 
// -hsigmond

protected void runAppFromApkFileOnSdCard() {

        final PackageManager pm = getActivity().getPackageManager();
        String apkFileName      = \"application_name.apk\";
        String fullPath         = \"/sdcard/\"+apkFileName;
        PackageInfo packageInfo = pm.getPackageArchiveInfo(fullPath,0);
        Intent intent           = pm.getLaunchIntentForPackage(packageInfo.packageName);

        if( intent == null ){
            File file   = new File(fullPath);
            intent      = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(Uri.fromFile(file),\"application/vnd.android.package-archive\");
        }
        startActivity(intent);
    }
采用:
packageInfo.applicationInfo.[\'name\',\'icon\',\'logo\'] etc.
示例图标:
Drawable icon = packageInfo.applicationInfo.loadIcon(getActivity().getPackageManager());
    ,您可能已经发现,PackageManager仅在安装了应用程序后才对您有用。 要解决在不安装应用程序的情况下使用APK提取程序获取信息的问题,请参阅:http://code.google.com/p/apk-extractor/downloads/detail?name=APK-Extractor-src-1.0.zip&can = 2&q =   此项目是为了尝试开发可公开使用的解析器   可以解析Android的二进制XML。 AAPT(Android资产打包   工具)使用Google自己的专有二进制文件对XML资源进行编码/解码   XML格式。人们普遍认为这是通用的WBXML格式   任何具有WBXML功能的解析器都可以解析它。但是这是错误的。      如果您打算探索Android的Binary XML,我的代码库可以   帮助您启动并在其之上构建服务。      版本1.0-能够解析Android清单,XML布局等。   并将DEX / ODEX转换为CLASS,任何人都可以打开   反编译器。 他的博客在这里: http://prasanta-paul.blogspot.com/2012/03/android-apk-extractor.html