Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
出現(xiàn)原因是因?yàn)閼?yīng)用適配了API 26的自適配圖標(biāo)adaptive-icon,使用下面的方法讀取icon剥槐,讀取到應(yīng)用的默認(rèn)的ICON圖標(biāo)是個(gè)adaptive-icon 類型屑彻,所以造成了強(qiáng)轉(zhuǎn)出錯(cuò)
問(wèn)題代碼:
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;
? ? }
}