我们可以使用VectorDrawable或VectorXML作为Android中推送通知的图标吗?

我正在使用PNG图像,但它的尺寸太大,所以我不得不妥协它的质量。 所以我认为矢量可能是另一种方式? 示例将是一个很大的帮助。

我们可以使用VectorDrawable或VectorXML作为推送通知的图标吗?

是的,只需将vector drawable称为通知的标准方式:

.setSmallIcon(R.drawable.my_vector) 

为了使用透明度(通知图标只有白色和/或透明),在设置矢量XML中的颜色时必须使用alpha通道,这意味着#00000000表示透明,#FFFFFFFF表示白色。

VectorDrawables仅作为高于(或等于)Android Lollipop的版本的通知图标 – 即API 21。

我知道这是因为我确实尝试使用.setSmallIcon(R.drawable.my_vector) ,如此处的其中一个答案中所示,虽然这对于API 21及更高版本的效果非常好,但我对Lollipop之前的版本有以下错误:

android.app.RemoteServiceException:从com.example.app包发布的错误通知:无法创建图标:StatusBarIcon(pkg = com.example.appuser = 0 id = 0x7f02005a level = 0 visible = true num = 0)

Stack Overflow上还有其他答案支持这个论点:

  • 一个是CommonsWare
  • 另一个是ianhanniballake

如果您使用矢量绘图支持包,可能不应在通知中使用VectorDrawable图标 – 您可能会在棒棒糖前设备上遇到错误。

看看这个: 使用向量drawable时通知会抛出错误

Wuthout矢量drawable支持包,我没有遇到任何错误,但在使用它之后,前棒棒糖设备在通知时无法访问矢量图标并抛出此错误:

android.app.RemoteServiceException:从包com.xxx.xxx发布的错误通知:无法创建图标:StatusBarIcon(pkg = com.xxx.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0)

对于版本<21,

如果你想直接将vector drawable资源id传递给setSmallIcon() :没办法。

对于setLargeIcon()间接,是的。 使用

 VectorDrawableCompat drawable = VectorDrawableCompat.create(context.getResources(), resource id, theme); 

然后从这个drawable创建Bitmap并传入setLargeIcon()