代码如下:


package com.gem.hsx;import java.io.File;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import android.app.Activity;import android.content.pm.ApplicationInfo;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.util.DisplayMetrics;import android.widget.ImageView;public class TesticonActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ImageView icon=(ImageView) findViewById(R.id.img_icon);icon.setBackgroundDrawable(getApkIcon("/sdcard/12.apk"));}public  Drawable  getApkIcon(String Path){//未安装的程序通过apk文件获取iconString apkPath = Path; //   apk  文件所在的路径String PATH_PackageParser = "android.content.pm.PackageParser";String PATH_AssetManager = "android.content.res.AssetManager";try {Class<?> pkgParserCls = Class.forName(PATH_PackageParser);Class<?>[] typeArgs = { String.class };Constructor<?> pkgParserCt = pkgParserCls.getConstructor(typeArgs);Object[] valueArgs = { apkPath };Object pkgParser = pkgParserCt.newInstance(valueArgs);DisplayMetrics metrics = new DisplayMetrics();metrics.setToDefaults();typeArgs = new Class<?>[] { File.class, String.class,DisplayMetrics.class, int.class };Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs);valueArgs = new Object[] { new File(apkPath), apkPath, metrics, 0 };Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser,valueArgs);Field appInfoFld = pkgParserPkg.getClass().getDeclaredField("applicationInfo");ApplicationInfo info = (ApplicationInfo) appInfoFld.get(pkgParserPkg);Class<?> assetMagCls = Class.forName(PATH_AssetManager);Object assetMag = assetMagCls.newInstance();typeArgs = new Class[1];typeArgs[0] = String.class;Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath", typeArgs);valueArgs = new Object[1];valueArgs[0] = apkPath;assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);Resources res = TesticonActivity.this.getResources();typeArgs = new Class[3];typeArgs[0] = assetMag.getClass();typeArgs[1] = res.getDisplayMetrics().getClass();typeArgs[2] = res.getConfiguration().getClass();Constructor<Resources> 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);if (info != null) {if (info.icon != 0) {Drawable  icon=res.getDrawable(info.icon);return  icon;}} } catch (Exception e) {e.printStackTrace();}return null;}}


更多相关文章

  1. android将视频文件转化为图片
  2. Android(安卓)7.0之后无摄像头调用闪关灯
  3. android 获取rom名称和版本号
  4. myAndroid(Struts2+Sitemesh+Freemarker)
  5. 基站定位获取位置坐标
  6. android 获取手机相关信息
  7. android问题:保存文件后文件内容为空
  8. Android下编写HelloWorld
  9. 使用Bitmap遍历Assets目录下图片

随机推荐

  1. TextView 点击事件无效的完美解决
  2. Android(安卓)LinearLayout详解
  3. Android底部导航栏组件:BottomNavigationB
  4. Android电源管理分析
  5. Android View动画——Alpha、scale等属性
  6. Android LCD:LCD基本原理篇
  7. Android的事件处理机制(概念理解)
  8. Android7.0 设置音量最小时有声音输出
  9. Android(安卓)Notification保留导航功能
  10. listview 问题总结