在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轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...