android 下获取apk的icon
16lz
2021-01-26
代码如下:
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;}}
更多相关文章
- android将视频文件转化为图片
- Android(安卓)7.0之后无摄像头调用闪关灯
- android 获取rom名称和版本号
- myAndroid(Struts2+Sitemesh+Freemarker)
- 基站定位获取位置坐标
- android 获取手机相关信息
- android问题:保存文件后文件内容为空
- Android下编写HelloWorld
- 使用Bitmap遍历Assets目录下图片