在Android中获取所有安装的应用程序图标:java.lang.ClassCastException

前端之家收集整理的这篇文章主要介绍了在Android中获取所有安装的应用程序图标:java.lang.ClassCastException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试获取已安装的应用程序图标时,有一个 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();

并且LogCat中显示错误

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

这个解决方案在任何情况下都可以工作

猜你在找的Android相关文章