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

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

其中,pm

PackageManager pm = getPackageManager();

LogCat 中显示的错误是

Caused by: java.lang.ClassCastException: android.graphics.drawable.NinePatchDrawable cannot be cast to android.graphics.drawable.BitmapDrawable

希望有人能帮助我。

最佳答案

你的问题是你的 Icon 不是 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, 0, canvas.getWidth(), canvas.getHeight());
     icon.draw(canvas);
     APKicon = bitmap;
}

这个解决方案在任何情况下都有效

关于android - 在 Android : java. lang.ClassCastException 中获取所有已安装的应用程序图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459618/

相关文章:

android - Phonegap Activity 重启失败

Android 库 - 使用 Gradle 将多个变体发布到本地 Maven 存储库

c# - 在不混合图像的情况下在计时器上旋转图像

java - Spring Async - 无法获取异步bean

java泛型数组和ClasscastException

android - 尝试在 Chrome 中调试时 React Native Android 崩溃

java - 将 matplotlib (Python) 与 Android Studio 集成

android - 位图回收Android

Android RemoteControlClient 位图缩放

jsf-2 - 带有 filterFunction 的 Primefaces 数据表日期范围过滤器