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