获取未安装apk图标
2011-08-23 16:55
253 查看
在网上找了一圈都是以下代码,在模拟器上测试可以获取apk图标,真机上却无法显示,唉~~
依据网上查找的资料,利用反射机制构建一个未安装apk的Resource对象,来访问apk内的资源。
最近在网上找到另一种方便方式获取apk图标的方式,和大家分享一下
public 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; Drawable icon = pm.getApplicationIcon(appInfo); ImageView image = (ImageView) findViewById(R.id.apk_icon); image.setVisibility(View.VISIBLE); image.setImageDrawable(icon); } }跟踪了一下主要是 PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);获取没有问题,可以得到Application的所有信息,但是再调用PackageManager获取apk图标却找不到,只返回了apk默认图标(绿色机器人),由于PackageManager是在当前应用内查找,所以查找不到。
依据网上查找的资料,利用反射机制构建一个未安装apk的Resource对象,来访问apk内的资源。
public static Resources getResources(String apkPath) throws Exception { String PATH_AssetManager = "android.content.res.AssetManager"; Class assetMagCls = Class.forName(PATH_AssetManager); Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null); Object assetMag = assetMagCt.newInstance((Object[]) null); Class[] typeArgs = new Class[1]; typeArgs[0] = String.class; Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath", typeArgs); Object[] valueArgs = new Object[1]; valueArgs[0] = apkPath; assetMag_addAssetPathMtd.invoke(assetMag, valueArgs); Resources res = getResources(); typeArgs = new Class[3]; typeArgs[0] = assetMag.getClass(); typeArgs[1] = res.getDisplayMetrics().getClass(); typeArgs[2] = res.getConfiguration().getClass(); Constructor resCt = Resources.class.getConstructor(typeArgs); valueArgs = new Object[3]; valueArgs[0] = assetMag; valueArgs[1] = res.getDisplayMetrics(); valueArgs[2] = res.getConfiguration(); res = (Resources) resCt.newInstance(valueArgs); return res; }通过PackageManager获取ApplicationInfo,利用Resource获取图标如下
public static Drawable getUninstallAPKIcon(Context context,String apkPath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES); Resources res = null; try { res = getResources(context,apkPath); } catch (Exception e) { return null; } if(info != null){ ApplicationInfo appInfo = info.applicationInfo; return res.getDrawable(appInfo.icon); } return null; }
最近在网上找到另一种方便方式获取apk图标的方式,和大家分享一下
public Drawable loadUninstallApkIcon(Context context, String archiveFilePath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); ApplicationInfo appInfo = info.applicationInfo; appInfo.sourceDir = archiveFilePath; appInfo.publicSourceDir = archiveFilePath; return appInfo.loadIcon(pm); }
![](http://hi.csdn.net/attachment/201108/23/0_1314089131QYzP.gif)
相关文章推荐
- [Android]获取未安装的APK图标
- 获取未安装的APK图标
- [Android]获取未安装的APK图标
- [Android]获取未安装的APK图标
- [Android]获取未安装的APK图标
- [Android]获取未安装的APK图标
- Android获取未安装的APK图标
- Android菜鸟笔记- 获取未安装的APK图标、版本、包名、名称、是否安装、安装、打开
- Android 获取未安装的APK图标、版本号、包名等信息
- 获取未安装的APK图标、版本、包名、名称、是否安装、安装、打开
- [Android]获取未安装的APK图标
- android获取sd卡上未安装的apk文件的图标
- android获取已安装nolaunch(没有安装图标)的apk
- 获取未安装APK文件的图标
- Android 获取未安装的APK图标、版本号、包名等信息方法
- Android 中获取未安装APK的 图标 || icon
- [Android]获取未安装的APK图标
- Android菜鸟笔记- 获取未安装的APK图标、版本、包名、名称、是否安装、安装、打开
- 获取未安装的APK图标、版本、包名、名称、是否安装、安装、打开
- 获取未安装的APK图标