![](/img/trans.png)
[英]How to get appicon programmatically from sdcard/storage .apk file?
[英]get apk info from a sdcard file
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 ...
如您在此处看到的,我无法获取应用程序名称,其图标始终是默认的相同图标。 我厌倦了市场上的其他安装程序,它们的效果很好,所以有人告诉我该怎么做吗? 谢谢。
您可以使用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对象中找到大量其他信息。
这是正确的答案,有一些技巧(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;
}
最简单的方法只需使用其packageName
获取任何应用程序的图标
public static final Drawable getIconOfAppUsingPackageName(Context context,String packageName)
{
Drawable icon = context.getPackageManager().getApplicationIcon(packageName);
imageView.setImageDrawable(icon);
return icon;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.