首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android从Package获得应用程序自适应图标

Android从Package获得应用程序自适应图标
EN

Stack Overflow用户
提问于 2017-09-09 12:15:00
回答 1查看 1.8K关注 0票数 3

我得到了像这样的应用程序启动图标

代码语言:javascript
复制
resolveInfo.activityInfo.loadIcon(packageManager)

但是在Android8.0Oreo中,由于适应性图标,这一行返回空图标给我。如何检索应用程序自适应图标?谢谢。。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 13:12:16

您可以使用这个类从adaptiveIcon获取位图。

代码语言:javascript
复制
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;
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46130594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档