当我尝试获取已安装的应用程序图标时,有一个
java.lang.ClassCastException.
这是我的代码
public Bitmap getAppIcon(String path) { PackageInfo pi = pm.getPackageArchiveInfo(path,0); pi.applicationInfo.sourceDir = path; pi.applicationInfo.publicSourceDir = path; Drawable icon = pi.applicationInfo.loadIcon(pm); Bitmap APKicon = ((BitmapDrawable) icon).getBitmap(); return APKicon; }
在哪里,pm是
PackageManager pm = getPackageManager();
Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
希望有人可以帮助我
解决方法
你的问题是你的图标不是BitmapDrawable的实例,可以像这样检查:
Bitmap APKicon; if(icon instanceof BitmapDrawable) { APKicon = ((BitmapDrawable)icon).getBitmap(); }
在这种情况下,您的解决方案是正确的,只需投入使用即可(如果没有),则需要执行以下操作:
else{ Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),icon.getIntrinsicHeight(),Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); icon.setBounds(0,canvas.getWidth(),canvas.getHeight()); icon.draw(canvas); APKicon = bitmap; }
这个解决方案在任何情况下都可以工作