В директивах
Android указано, что значки уведомлений должны быть полностью белыми и иметь прозрачный фон. Затем их фактический цвет контролируется с помощью метода setColor () уведомления или, в случае фоновых уведомлений Firebase, метаданных манифеста. Поскольку я хочу, чтобы уведомления моего приложения отображались черным значком, я настроил манифест следующим образом:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/firebase_notification_icon" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/black" />
Однако недавно я заметил, что в устройствах Samsung есть два ключевых различия в том, как уведомление обрабатываются значки:
- Настройка цвета полностью игнорируется, и цвет значка будет таким, какой был задан в чертеже. (В моем случае белый, у которого есть неприятный побочный эффект - сделать иконку невидимой, поскольку она белая на белом фоне)
- В отличие от других Android устройств, значки могут иметь несколько цветов, и они будут отображаться точно так, как определено в Drawable, как в строке состояния, так и в самом уведомлении.
С учетом этих двух моментов, мне кажется, что мне нужно использовать другой Drawable в зависимости от того, является ли устройство Samsung. Я сделал это программно в методе onMessageReceived () Firebase, но, к сожалению, это касается только уведомлений, полученных, когда приложение находится на переднем плане. Для фоновых уведомлений он контролируется метаданными манифеста, о которых я упоминал выше, поэтому мне нужен способ программно установить значение default_notification_icon
. Как я могу это сделать?