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 类型,所以造成了强转出错
问题代码:
Bitmap icon = ((BitmapDrawable) activity.getApplicationInfo().loadIcon(activity.getPackageManager())).getBitmap();
解决方案:
Bitmap icon = getIconBitmap(activity);
public static Bitmap getIconBitmap(Activity activity) {
try {
//Drawable icon = ContextCompat.getDrawable(context, iconId);
Drawable icon = activity.getApplicationInfo().loadIcon(activity.getPackageManager());
if (icon ==null) {
return null;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && iconinstanceof android.graphics.drawable.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;
}
}