tring(R.string.new_pictures_title))
.setContentText(resources.getSt
ring(R.string.new_pictures_text))
.setContentIntent(pendingIntent
)
.setAutoCancel(true)
.build()
val
notificationManager
=
NotificationManagerCompat.from(context)
notificationManager.notify(0,
notification)
}
return Result.success()
}
}
Давайте пройдемся по этому коду сверху вниз.
Мы используем класс
NotificationCompat
для работы с
уведомлениями как на устройствах до Oreo, так и после Oreo.
NotificationCompat.Builder
принимает ID канала и
использует его для установки параметра канала уведомления,
если пользователь запустил приложение на Oreo или выше.
Если у пользователя запущена более ранняя версия Android,
NotificationCompat.Builder
игнорирует канал. (Обратите
внимание, что идентификатор канала, который вы передаете
здесь, происходит от константы
NOTIFICATION_CHANNEL_ID
,
которую вы добавили в
PhotoGalleryApplication
.)
В листинге 27.9 перед созданием канала вы проверили
версию SDK, потому что AppCompat API для создания канала не
существует. Здесь это не нужно делать, потому что
NotificationCompat
в AppCompat выполняет всю работу по
проверке версии сборки, сохраняя ваш код в чистоте и красоте.
Это одна из причин, по которой нужно использовать версию
AppCompat Android API, когда это доступно.
Текст уведомления и значок мы настраиваем с помощью
функций
setTicker
(CharSequence)
и
setSmallIcon(Int)
. (Ресурс значка, который вы используете,
входит во фреймворк Android, обозначается классификатором
имен
пакетов
androidвandroid.R.drawable.ic_menu_report_image
, так
что вам не нужно переносить изображение значка в папку
ресурса.)
После этого мы настроим внешний вид
Notification
на
панели. Можно создать полностью пользовательский внешний
вид, но проще всего использовать стандартный вид
уведомления, в котором есть иконка, заголовок и текстовая
область. Иконка берется из функции
setSmallIcon(Int)
. Для
установки заголовка и текста вызываются функции
setContentTitle(CharSequence)
и
setContentText(CharSequence)
соответственно.
Затем мы задаем, что произойдет, когда пользователь
нажмет на уведомление. Это делается с помощью объекта
PendingIntent
. Объект
PendingIntent
, который вы
передаете в
setContentIntent(PendingIntent)
, будет
уничтожен, когда пользователь нажмет на уведомление на
панели. Вызов функции
setAutoCancel(true)
немного
корректирует это поведение: уведомление также будет удалено
из ящика уведомлений, когда пользователь нажмет на него.
Наконец, мы получаем экземпляр
NotificationManager
из текущего контекста (
NotificationManagerCompat.from
)
и вызываем функцию
NotificationManager.notify(...)
для размещения вашего уведомления.
Целый параметр, который вы передаете в функцию
notify(...)
,
является
идентификатором
вашего
уведомления. Он должен быть уникальным во всем вашем
приложении, но может быть использован повторно. Одно
уведомление заменит другое тем же самым идентификатором,
который все еще находится в ящике уведомлений. Если нет
существующего уведомления с идентификатором, система
покажет новое уведомление. Именно так вы реализуете
индикатор
выполнения
или
другие
динамические
визуализации.
И все. Запустите ваше приложение, и в конце концов в
строке состояния появится значок уведомления (рис. 27.5)
(лучше очистить поисковые запросы, чтобы ускорить процесс).
Do'stlaringiz bilan baham: |