В 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 может не появиться, даже если иконка указана правильно
Как проверить
- Соберите приложение.
- Отправьте тестовое уведомление.
- Посмотрите на иконку в статус-баре и шторке.
- Если виден белый квадрат или пустое место, замените картинку на более простую vector-иконку.
Не проверяйте только на одном устройстве. Оболочки Android могут по-разному рисовать уведомления
Для теста удобно сделать временную кнопку «Показать уведомление». Так вы быстро проверите иконку, канал, разрешение и текст без ожидания реального события в приложении. После проверки кнопку можно убрать или спрятать в debug-сборку
Частые ошибки
Ставить launcher icon
Иконка приложения часто цветная и детальная. Для setSmallIcon она не подходит
Использовать mipmap вместо drawable
Для иконки уведомления обычно используйте drawable, а не launcher-ресурсы из mipmap
Забыть channel
Если канал уведомлений не создан на новых версиях Android, уведомление может не появиться
Не запросить разрешение на Android 13+
Если приложение ориентируется на современные версии Android, проверьте разрешение POST_NOTIFICATIONS
Что выбрать для своей иконки
Сделайте отдельную простую иконку под уведомления: один символ, без мелких деталей, без фотографии и без длинного текста внутри. Если брендовая иконка сложная, нарисуйте упрощенную версию. Цель маленькой иконки — быть узнаваемой в статус-баре, а не повторять полный логотип приложения
Что почитать дальше по Kotlin
Если нужен общий маршрут по теме, откройте рубрику Kotlin. Для соседних задач пригодятся эти разборы:
- Kotlin Android: первый экран без перегруза
- UUID Android-устройства в Kotlin ViewModel: как получить безопасно
- Как в Android Studio поменять Kotlin на Java
- Как воспроизвести аудио на Kotlin в Android Studio



