此函數功能,是給一個apk檔路徑,返回這個apk的圖示資訊, 此方法可行,已經驗證了。

private void showUninstallAPKIcon(String apkPath) {

 String PATH_PackageParser = "android.content.pm.PackageParser";

 String PATH_AssetManager = "android.content.res.AssetManager";

 try {

 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);

 Log.d("ANDROID_LAB", "pkgParser:" + pkgParser.toString());

 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 = context.getResources();// 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);

 

CharSequence label = null;

 

if (info.labelRes != 0) {

 

label = res.getText(info.labelRes);

 

}

 

Log.d("ANDROID_LAB", "label=" + label);

 

if (info.icon != 0) {

 

Drawable icon = res.getDrawable(info.icon);

 

ImageView image = (ImageView) findViewById(R.id.mgv);

 

image.setVisibility(View.VISIBLE);

 

image.setImageDrawable(icon);

 

//resizeImage(icon,48, 48);

 

}

 

} catch (Exception e) {

 

e.printStackTrace();

 

}

 

}
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()