获得anddroid8.0桌面图标,适应AdaptiveIconDrawable

获取应用图标时,8.0以上系统会报.AdaptiveIconDrawable.getOutline(AdaptiveIconDrawable.java:405)和AdaptiveIconDrawable.isProjected错误,导致项目崩溃。是因为8.0以后Google添加了自适应图标AdaptiveIconDrawable,所以获取图标使用下面的方法

@RequiresApi(api = Build.VERSION_CODES.O)
    public static Bitmap getAppIconFor8(Context context, String packageName) {

        PackageManager mPackageManager = context.getPackageManager();
        Bitmap bitmap =null;
        try {
            Drawable drawable = mPackageManager.getApplicationIcon(packageName);

            if (drawable instanceof BitmapDrawable) {
                bitmap =((BitmapDrawable) drawable).getBitmap();
            } else if (drawable instanceof AdaptiveIconDrawable) {
                int j = drawable.getIntrinsicWidth();
                int k = drawable.getIntrinsicHeight();
                int i = j;
                if (j <= 0) {
                    i = 1;
                }
                j = k;
                if (k <= 0) {
                    j = 1;
                }
                bitmap = Bitmap.createBitmap(i, j, Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
                drawable.draw(canvas);
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if(bitmap == null){
            //默认图标
            Drawable drawable=context.getResources().getDrawable(R.drawable.ic_launcher);
            return ((BitmapDrawable) drawable).getBitmap();
        }
        return bitmap;
    }

猜你喜欢

转载自blog.csdn.net/Luffy0719/article/details/89535277