常见场景:

通过BitmapFactory.decodeResource的方式,设置Notification的LargeIcon,当APP适配了自适应Icon后,获取不到Bitmap对象。

方式一:

public Bitmap getAppIcon(Context context) {    if (context == null) {        return null;    }    try {        PackageManager packageManager = context.getApplicationContext().getPackageManager();        String packageName = context.getApplicationContext().getPackageName();        Drawable drawable = packageManager.getApplicationIcon(packageName);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            if (drawable instanceof BitmapDrawable) {                return ((BitmapDrawable) drawable).getBitmap();            } else if (drawable instanceof AdaptiveIconDrawable) {                Drawable[] drr = new Drawable[2];                drr[0] = ((AdaptiveIconDrawable) drawable).getBackground();                drr[1] = ((AdaptiveIconDrawable) drawable).getForeground();                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;            }        } else {            return ((BitmapDrawable) drawable).getBitmap();        }    } catch (Exception e) {        e.printStackTrace();    }    return null;}

方式二:

public Bitmap getAppIcon(Context context) {    if (context == null) {        return null;    }    try {        PackageManager packageManager = context.getApplicationContext().getPackageManager();        String packageName = context.getApplicationContext().getPackageName();        Drawable drawable = packageManager.getApplicationIcon(packageName);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {            if (drawable instanceof BitmapDrawable) {                return ((BitmapDrawable) drawable).getBitmap();            } else if (drawable instanceof AdaptiveIconDrawable) {                Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);                Canvas canvas = new Canvas(bitmap);                drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());                drawable.draw(canvas);                return bitmap;            }        } else {            return ((BitmapDrawable) drawable).getBitmap();        }    } catch (Exception e) {        e.printStackTrace();    }    return null;}

更多相关文章

  1. 高德Demo,网上找了很多资料都不适合,自己研究出一个Demo,非常适合入
  2. Android中的HTTP通信
  3. Android为数据存储提供几种方式
  4. android中Bitmap对象怎么保存为文件?
  5. [Android(安卓)Pro] 关于BitmapFactory.decodeStream(is)方法无
  6. Android之Broadcast, BroadcastReceiver(广播)
  7. Android学习——在线查看android源代码的3种方式
  8. 关于android pendingIntent 传递Parcelable对象时数据丢失问题
  9. pull解析和json编码

随机推荐

  1. android传感器Gsensor和Psensor的使用举
  2. android quicksearchbox修改默认搜索引擎
  3. Android开发心得整理
  4. android系统属性读写操作SystemPropertie
  5. 【JAVA】给大家推荐一道有意思的java测试
  6. ButterKnife--View注入框架
  7. Android添加一个新的按键Key
  8. android 网络定位失败 location为null的
  9. Android简单笔记本解析
  10. 反编译Android(安卓)apk文件