Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 出现原因是因为应用适配了API 26的自适配图标adaptive-icon,使用下面的方法读取icon,读取到应用的默认的ICON图标是个adaptive-icon 类型,所以造成了强转出错
BitmapDrawable bd = (BitmapDrawable) FileManagerApplication.getContext().getResources().getDrawable(R.mipmap.ic_launcher_document); Bitmap logoBmp = bd.getBitmap();
解决方法:
final Bitmap logoBmp = ImageThumbnail.getIconBitmap(FileManagerApplication.getContext(), R.mipmap.ic_launcher_document); public static Bitmap getIconBitmap(Context context, int iconId) { try { Drawable icon = ContextCompat.getDrawable(context, iconId); if (icon == null) { return null; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && icon instanceof AdaptiveIconDrawable) { Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); icon.draw(canvas); return bitmap; } else { return ((BitmapDrawable) icon).getBitmap(); } } catch (Exception e) { return null; } }