在 Android 中获取所有已安装的应用程序图标:java.lang.ClassCastException [英] Get All Installed Application icons in Android : java.lang.ClassCastException

查看:33
本文介绍了在 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

希望有人能帮助我.

推荐答案

你的问题是你的 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆