Можем ли мы использовать VectorDrawable или VectorXML в качестве значков для push-уведомлений в android?

Я использую PNG-изображение, но его размер становится слишком большим, поэтому я должен идти на компромисс с его качеством. Так я думал, что векторы могут быть другим способом? Пример будет большой помощью.

Можно ли использовать VectorDrawable или VectorXML в качестве значков для push-уведомлений?

Да, просто назовите вектор, который можно использовать для стандартных уведомлений:

.setSmallIcon(R.drawable.my_vector) 

Чтобы использовать прозрачность (значки уведомлений только белые и / или прозрачные), вам придется использовать альфа-каналы при настройке цветов в векторном XML, что означает # 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 в уведомлениях, если используете векторный пакет поддержки с возможностью переноса – вы можете столкнуться с ошибками на устройствах с предварительным леоптипом.

Проверьте это: уведомление выдает ошибку при использовании векторных чертежей

Wuthout векторный пакет поддержки, я не сталкивался с какими-либо ошибками, но после его использования устройства с предварительным леоптипом не смогли получить доступ к значку вектора во время уведомления и выбросили эту ошибку:

Android.app.RemoteServiceException: Неверное уведомление, отправленное из пакета com.xxx.xxx: Не удалось создать значок: StatusBarIcon (pkg = com.xxx.xxxuser = 0 id = 0x7f020082 level = 0 visible = true num = 0)

Для версии <21,

Если вы хотите напрямую передать векторный идентификатор ресурса в setSmallIcon () : нет способа.

Для setLargeIcon () косвенно, да. использование

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

Затем создайте Bitmap из этого drawable и перейдите в setLargeIcon ()