在Android中获取所有已安装的应用程序图标:java.lang.ClassCastException [英] Get All Installed Application icons in Android : java.lang.ClassCastException
本文介绍了在Android中获取所有已安装的应用程序图标:java.lang.ClassCastException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我尝试获取已安装的应用程序图标时,出现一个java.lang.ClassCastException
.
There is a java.lang.ClassCastException
when I am trying to get a installed applications icon.
这是我的代码.
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();
并且LogCat
中显示的错误是
Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
希望任何人都可以帮助我.
Hope anybody can help me.
推荐答案
您的问题是您的Icon不是BitmapDrawable的实例,可以这样检查:
Your Problem is that your Icon is no instance of BitmapDrawable, one can check like that:
Bitmap APKicon;
if(icon instanceof BitmapDrawable) {
APKicon = ((BitmapDrawable)icon).getBitmap();
}
在这种情况下,您的解决方案将是正确的,您可以将其强制转换,但如果不这样做(这是您的情况),则需要执行以下操作:
in this case your solution would be right, one can just cast it, but if not (and that is your case) one needs to do something like that:
else{
Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),icon.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
icon.draw(canvas);
APKicon = bitmap;
}
此解决方案在任何情况下均适用
this solution will work in any case
这篇关于在Android中获取所有已安装的应用程序图标:java.lang.ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文