Мое приложение генерирует уведомление, но значок, который я установил для этого уведомления, не отображается. Вместо этого я получаю белый квадрат.
Я попытался изменить размер png иконки (размеры 720x720, 66x66, 44x44, 22x22). Любопытно, что при использовании меньших размеров белый квадрат меньше.
Я погуглил эту проблему, а также правильный способ создания уведомлений, и из того, что я прочитал, мой код должен быть правильным. К сожалению, все не так, как должно быть.
У меня телефон Nexus 5 с Android 5.1.1. Проблема также присутствует на эмуляторах, Samsung Galaxy s4 с Android 5.0.1 и Motorola Moto G с Android 5.0.1 (оба из которых я позаимствовал, а сейчас нет)
Далее следует код для уведомлений и два скриншота. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать ее.
Спасибо вам всем.
@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
resultIntent.putExtras(bundle);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification notification;
Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.lg_logo)
.setContentTitle(title)
.setStyle(new Notification.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setContentText(msg)
.setContentIntent(contentIntent)
.setSound(sound)
.build();
notificationManager.notify(0, notification);
}
источник
Ответы:
Причина: для 5.0 Lollipop «Значки уведомлений должны быть полностью белыми».
Решение для целевой СДК 21
Если вы хотите поддерживать Lollipop Material Icons, сделайте прозрачные иконки для Lollipop и выше. Пожалуйста, ознакомьтесь со следующим: https://design.google.com/icons/
Пожалуйста, посмотрите на http://developer.android.com/design/style/iconography.html , и мы увидим, что белый стиль - это способ отображения уведомлений в Android Lollipop.
В Lollipop Google также предлагает использовать цвет, который будет отображаться за белым значком уведомления. Ссылка на ссылку: https://developer.android.com/about/versions/android-5.0-changes.html
Везде, где мы хотим добавить цвета https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)
Реализация Notification Builder для версий Lollipop OS ниже и выше:
Примечание: setColor доступен только в Lollipop и влияет только на фон значка.
Это решит вашу проблему полностью !!
источник
Если вы используете Google Cloud Messaging, эта проблема не будет решена простым изменением вашего значка. Например, это не будет работать:
Даже если ic_notification является прозрачным и белым. Он также должен быть определен в метаданных Манифеста, например так:
Метаданные идут под
application
тегом, для справки.источник
res/drawable/ic_notification.png
размером 196x196?Meta-data
предложение тега.Я действительно рекомендую следовать правилам дизайна Google :
который говорит: «Значки уведомлений должны быть полностью белыми».
источник
Объявите этот код в манифесте Android:
Я надеюсь, что это полезно для вас.
источник
ic_stat_name
? Это один PNG? это много? пожалуйста помоги!(Android Studio 3.5) Если вы используете последнюю версию Android Studio, вы можете создавать изображения для уведомлений. Щелкните правой кнопкой мыши на папке Res > New> Image Asset . Затем вы увидите Configure Image Assets, как показано на рисунке ниже. Измените Тип значка на Значки уведомлений . Ваши изображения должны быть белыми и прозрачными. Эта настройка активов изображения будет применять это правило. Важное замечание: Если вы хотите, чтобы значки использовались для облачных / push-уведомлений, необходимо добавить метаданные под тегом приложения, чтобы использовать вновь созданные значки уведомлений.
источник
Мы можем сделать как ниже:
Создайте новый объект построителя уведомлений и вызовите,
setSmallIcon()
используя объект построителя уведомлений, как показано в приведенном ниже коде.Создайте метод, в котором мы будем проверять, на какую версию ОС мы устанавливаем наше приложение. Если он ниже Lolipop, то есть API 21, тогда он возьмет обычный значок приложения с цветом фона, иначе он возьмет прозрачный значок приложения без фона. Таким образом, устройства, использующие версию os> = 21, будут устанавливать цвет фона значка, используя метод
setColor()
класса Notification Builder.Образец кода:
источник
setColor
Kitkat (API 19) и IceCreamSandwich (API 15), в обоих случаях он игнорировал цвет, но не падал . Так что я могу безопасно пропустить проверку версии ОС?Попробуй это
Я столкнулся с той же проблемой, я попробовал много ответов, но не получил никаких решений, наконец, я нашел способ решить свою проблему.
- сделать значок уведомления с прозрачным фоном. Ширина и высота приложения должны быть такими же, как ниже размеров, и вставить все это в ваш проект-> app-> src-> main-> res
MDPI 24 * 24
HDPI 36 * 36
XHDPI 48 * 48
XXHDPI 72 * 72
после вышеупомянутого вставьте эту строку ниже в ваш метод onMessageReceived
Не забудьте добавить этот код в файл манифеста
источник
добавьте эту строку в файл manifest.xml в блоке приложения
источник
Если вы хотите предоставить значок уведомления поддержки lollipop, сделайте значок уведомления двух типов:
Теперь установите соответствующий значок для построителя уведомлений во время выполнения в зависимости от версии ОС:
источник
Наконец-то у меня есть решение этой проблемы.
Эта проблема возникает только тогда, когда приложение вообще не работает. (ни на заднем плане, ни на переднем плане) . Когда приложение работает на переднем или на заднем плане, значок уведомления отображается правильно (не белый квадрат)
Итак, мы должны установить ту же конфигурацию для значка уведомлений в Backend API, что и в Frontend.
Во внешнем интерфейсе мы использовали React Native, а для push-уведомлений мы использовали пакет response-native-fcm npm .
Мы использовали пакет fcm-push npm с использованием Node.js в качестве бэкэнда для push-уведомлений и установили структуру полезной нагрузки следующим образом.
То, что он в основном ищет для изображения messages_icon, хранящегося локально в нашей системе Android.
источник
Уведомления отображаются в оттенках серого, как описано ниже. Они не черно-белые, несмотря на то, что написали другие. Возможно, вы видели значки с несколькими оттенками, например, шкалы силы сети.
До API 21 (Lollipop 5.0) работали цветные значки. Вы можете принудительно настроить ваше приложение на API 20, но это ограничивает возможности, доступные для вашего приложения, поэтому это не рекомендуется. Вы можете проверить работающий уровень API и соответственно установить либо цветную иконку, либо иконку в оттенках серого, но это, вероятно, не стоит. В большинстве случаев лучше всего использовать значок в оттенках серого.
Изображения имеют четыре канала RGBA (красный / зеленый / синий / альфа). Для значков уведомлений Android игнорирует каналы R, G и B. Единственный канал, который учитывается, это Альфа, также известный как непрозрачность. Создайте свой значок с помощью редактора, который дает вам контроль над альфа-значением цветов вашего рисунка.
Как альфа-значения генерируют серое изображение:
Изменяя это с
setColor
:Вызов
NotificationCompat.Builder.setColor(int argb)
. Из документации дляNotification.color
:Мое тестирование с использованием setColor показывает, что компоненты Alpha не игнорируются. Более высокие значения Alpha окрашивают пиксель в белый цвет. Более низкие значения альфа-канала превращают пиксель в цвет фона (черный на моем устройстве) в области уведомлений или в указанный цвет в раскрывающемся уведомлении.
источник
Я решил проблему, добавив ниже код для манифеста,
где
ic_stat_name
создан на Android Studio Щелкните правой кнопкой мыши на res >> Новый >> Активы изображения >> IconType (Уведомление)И еще один шаг, который я должен сделать на стороне сервера php с полезной нагрузкой уведомления
Обратите внимание на раздел
где имя иконки
"icon" => "ic_stat_name"
должно быть одинаковым в манифесте.источник
Требования для устранения этой проблемы:
Формат изображения: 32-битный PNG (с альфа-каналом)
Изображение должно быть прозрачным
Индекс цвета прозрачности: белый (FFFFFF)
Источник: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html
источник
Я нашел ссылку, где мы можем создать наш собственный белый значок,
Откройте эту ссылку и загрузите свой ic_launcher или значок уведомления
источник
Вы можете использовать разные иконки для разных версий. Просто установите логику на иконку следующим образом:
источник
Для SDK> = 23, пожалуйста, добавьте setLargeIcon
источник
Чтобы уменьшить количество специфичных для SDK версий, вы можете просто сделать это: (заменить '#' на '0x')
источник
0xFF169AB9
Вам не хватает полностью непрозрачного альфа-канала.Если вы хотите сохранить красочную иконку - Временное решение
Добавьте пиксель с немного другим цветом в иконку.
В моем случае есть черный значок с оттенками и светом. При добавлении синего пикселя все работает.
источник
У меня есть аналогичная проблема на Android 8.0. Попробуйте использовать БЕЛЫЙ значок ресурса. У меня белый квадрат, когда я пытаюсь использовать цветное изображение для значка, когда я заменяю его на белый значок, он начинает работать.
источник