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

Ale*_*lan 11 android bitmap classcastexception nine-patch

有一个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;
    }
Run Code Online (Sandbox Code Playgroud)

在哪里,pm

PackageManager pm = getPackageManager();
Run Code Online (Sandbox Code Playgroud)

并且显示的错误LogCat

Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我.

Tom*_*aub 19

您的问题是您的Icon不是BitmapDrawable的实例,可以像这样检查:

Bitmap APKicon;
if(icon instanceof BitmapDrawable) {
  APKicon  = ((BitmapDrawable)icon).getBitmap();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你的解决方案是正确的,一个人可以投出它,但如果没有(这是你的情况),你需要做类似的事情:

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;
}
Run Code Online (Sandbox Code Playgroud)

这种解决方案无论如何都适用