网上流传的方法
publicstatic void getUninatllApkInfo(Context context,String archiveFilePath){
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath,PackageManager.GET_ACTIVITIES);
if(info != null){
ApplicationInfo appInfo = info.applicationInfo;
StringappName =pm.getApplicationLabel(appInfo).toString();
String packageName = appInfo.packageName;
Drawableicon =pm.getApplicationIcon(appInfo);
}
}
其中archiveFilePath变量为apk文件的绝对路径,如/mnt/sdcard/abc.apk.这种方法可以正常得到APK的包名,但是ICON及Label(即程序中appName)提示有NullPointerException错误,不能得到对应的值,而是返回了包名packageName.貌似只有Android2.1及以下版本可以适用。在高版本中无法正确得到。
其实呢,是可以得到的,只是还需要添加两行代码。
appInfo.sourceDir = archiveFilePath;
appInfo.publicSourceDir = archiveFilePath;
即在得到的ApplicationInfo中设置sourceDir和publicSourceDir为APK绝对路径即可。
据测试,在Android4.2版本可正常运行。
折腾了半天,终于在同学的帮助下搞定了这个问题。好好学习,天天向上~~