只有一个方法。
1 public synchronized static Drawable getIconFromPackageName(String packageName, Context context) { 2 PackageManager pm = context.getPackageManager(); 3 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 4 try { 5 PackageInfo pi = pm.getPackageInfo(packageName, 0); 6 Context otherAppCtx = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY); 7 int displayMetrics[] = {DisplayMetrics.DENSITY_XXXHIGH,DisplayMetrics.DENSITY_XXHIGH,DisplayMetrics.DENSITY_XHIGH, DisplayMetrics.DENSITY_HIGH, DisplayMetrics.DENSITY_TV}; 8 for (int displayMetric : displayMetrics) { 9 try { 10 Drawable d = otherAppCtx.getResources().getDrawableForDensity(pi.applicationInfo.icon, displayMetric); 11 if (d != null) { 12 return d; 13 } 14 } catch (Resources.NotFoundException e) { 15 continue; 16 } 17 } 18 } catch (Exception e) { 19 // Handle Error here 20 } 21 } 22 ApplicationInfo appInfo = null; 23 try { 24 appInfo = pm.getApplicationInfo(packageName, 0); 25 } catch (PackageManager.NameNotFoundException e) { 26 return null; 27 } 28 return appInfo.loadIcon(pm); 29 }