show Uninstall APK Icon - Android App

Android examples for App:APK Install and Uninstall

Description

show Uninstall APK Icon

Demo Code


import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;

public class Main {
  @SuppressWarnings("rawtypes")
  public static Drawable showUninstallAPKIcon(Context c, String apkPath) {

    String PATH_PackageParser = "android.content.pm.PackageParser";
    String PATH_AssetManager = "android.content.res.AssetManager";
    try {//  w ww.ja  va2 s  .  com
      Class<?> pkgParserCls = Class.forName(PATH_PackageParser);
      Class[] typeArgs = new Class[1];
      typeArgs[0] = String.class;
      Constructor<?> pkgParserCt = pkgParserCls.getConstructor(typeArgs);
      Object[] valueArgs = new Object[1];
      valueArgs[0] = apkPath;
      Object pkgParser = pkgParserCt.newInstance(valueArgs);
      DisplayMetrics metrics = new DisplayMetrics();
      metrics.setToDefaults();
      typeArgs = new Class[4];
      typeArgs[0] = File.class;
      typeArgs[1] = String.class;
      typeArgs[2] = DisplayMetrics.class;
      typeArgs[3] = Integer.TYPE;
      Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs);
      valueArgs = new Object[4];
      valueArgs[0] = new File(apkPath);
      valueArgs[1] = apkPath;
      valueArgs[2] = metrics;
      valueArgs[3] = 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);
      Constructor<?> assetMagCt = assetMagCls.getConstructor((Class[]) null);
      Object assetMag = assetMagCt.newInstance((Object[]) null);
      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 = c.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 = resCt.newInstance(valueArgs);

      if (info.icon != 0) {
        return res.getDrawable(info.icon);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
}

Related Tutorials