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