Как заменить иконку в notification на свою в Android Kotlin

В Android иконка уведомления задается через setSmallIcon. Важно: это не обычная цветная иконка приложения. Для notification нужна отдельная маленькая иконка, обычно белый силуэт на прозрачном фоне

Пример:

val notification = NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("Новое сообщение")
    .setContentText("Проверьте приложение")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    .build()

Здесь R.drawable.ic_notification — ваша иконка для уведомления

Куда положить иконку

Положите файл в res/drawable, например:

app/src/main/res/drawable/ic_notification.xml

Лучше использовать vector drawable. Для статус-бара Android часто отображает только силуэт, поэтому сложная цветная картинка может превратиться в белое пятно

Пример простого vector drawable:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
    <path
        android:fillColor="@android:color/white"
        android:pathData="M12,2L4,6v6c0,5 3.4,9.7 8,11c4.6,-1.3 8,-6 8,-11V6z" />
</vector>

Полный пример отправки уведомления

val notification = NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("Готово")
    .setContentText("Задача выполнена")
    .setAutoCancel(true)
    .build()

NotificationManagerCompat.from(this).notify(1001, notification)

На Android 8 и выше не забудьте создать notification channel. На Android 13 и выше для показа уведомлений может понадобиться разрешение POST_NOTIFICATIONS

Минимальная идея канала:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
        CHANNEL_ID,
        "Основные уведомления",
        NotificationManager.IMPORTANCE_DEFAULT
    )

    getSystemService(NotificationManager::class.java)
        .createNotificationChannel(channel)
}

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

Как проверить

  1. Соберите приложение.
  2. Отправьте тестовое уведомление.
  3. Посмотрите на иконку в статус-баре и шторке.
  4. Если виден белый квадрат или пустое место, замените картинку на более простую vector-иконку.

Не проверяйте только на одном устройстве. Оболочки Android могут по-разному рисовать уведомления

Для теста удобно сделать временную кнопку «Показать уведомление». Так вы быстро проверите иконку, канал, разрешение и текст без ожидания реального события в приложении. После проверки кнопку можно убрать или спрятать в debug-сборку

Частые ошибки

Ставить launcher icon

Иконка приложения часто цветная и детальная. Для setSmallIcon она не подходит

Использовать mipmap вместо drawable

Для иконки уведомления обычно используйте drawable, а не launcher-ресурсы из mipmap

Забыть channel

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

Не запросить разрешение на Android 13+

Если приложение ориентируется на современные версии Android, проверьте разрешение POST_NOTIFICATIONS

Что выбрать для своей иконки

Сделайте отдельную простую иконку под уведомления: один символ, без мелких деталей, без фотографии и без длинного текста внутри. Если брендовая иконка сложная, нарисуйте упрощенную версию. Цель маленькой иконки — быть узнаваемой в статус-баре, а не повторять полный логотип приложения

Что почитать дальше по Kotlin

Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x