从包管理器获取Android应用程序自适应图标

3
我正在获取应用程序启动器图标,如下所示:
resolveInfo.activityInfo.loadIcon(packageManager)

但在Android 8.0 Oreo中,由于自适应图标的原因,这行代码返回空图标。我该如何检索应用程序的自适应图标呢?谢谢。


有什么想法吗? - ithink
1个回答

5
您可以使用此类从自适应图标中获取位图。
public static class AppIconHelperV26 {

  @RequiresApi(api = Build.VERSION_CODES.O)
    public static Bitmap getAppIcon(PackageManager mPackageManager, String packageName) {

        try {
            Drawable drawable = mPackageManager.getApplicationIcon(packageName);

            if (drawable instanceof BitmapDrawable) {
                return ((BitmapDrawable) drawable).getBitmap();
            } else if (drawable instanceof AdaptiveIconDrawable) {
                Drawable backgroundDr = ((AdaptiveIconDrawable) drawable).getBackground();
                Drawable foregroundDr = ((AdaptiveIconDrawable) drawable).getForeground();

                Drawable[] drr = new Drawable[2];
                drr[0] = backgroundDr;
                drr[1] = foregroundDr;

                LayerDrawable layerDrawable = new LayerDrawable(drr);

                int width = layerDrawable.getIntrinsicWidth();
                int height = layerDrawable.getIntrinsicHeight();

                Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

                Canvas canvas = new Canvas(bitmap);

                layerDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
                layerDrawable.draw(canvas);

                return bitmap;
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }
}

我在SDK管理器中拥有最新版本的SDK工具,但AdaptiveIconDrawable类无法解析。 - ithink
在你的Gradle中将CompileSdkVersion更改为26。 - Vishnu Prasad
@VishnuPrasad 有没有一种方法可以将自适应图标剪裁成特定的形状?提前感谢。 - Jahir Fiquitiva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接