После обновления моего проекта до Android O
buildToolsVersion "26.0.1"
Lint в Android Studio показывает устаревшее предупреждение для следующего метода построения уведомлений:
new NotificationCompat.Builder(context)
Проблема в том, что разработчики Android обновляют свою Документацию с описанием NotificationChannel для поддержки уведомлений в Android O и предоставляют нам фрагмент кода, но с тем же устаревшим предупреждением:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Мой вопрос: есть ли какое-либо другое решение для создания уведомлений, и все еще поддерживает Android O?
Решение, которое я нашел, состоит в том, чтобы передать идентификатор канала в качестве параметра в конструкторе Notification.Builder. Но это решение не является многоразовым.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
источник
источник
notificationBuild.setChannelId("channel_id")
. В моем случае это последнее решение более пригодно для повторного использования, так как myNotificationCompat.Builder
используется в нескольких методах, сохраняя параметры для значков, звуков и вибраций.Ответы:
В документации упоминается, что метод
NotificationCompat.Builder(Context context)
построения устарел. И мы должны использовать конструктор, который имеетchannelId
параметр:NotificationCompat.Builder Документация:
Notification.Builder Документация:
Если вы хотите повторно использовать установщики компоновщика, вы можете создать компоновщик с помощью
channelId
и передать его компоновщику вспомогательному методу и установить в нем предпочтительные параметры.источник
Notification.Builder(context)
решения в сеансе NotificationChannel. Но, по крайней мере, вы нашли сообщение, уведомляющее об этом как об устаревшем =)NotificationCompat.Builder(Context context)
, а затем назначить канал следующим образом:builder.setChannelId(String channelId)
Вот рабочий код для всех версий Android от API LEVEL 26+ с обратной совместимостью.
источник
.setPriority(Notification.PRIORITY_MAX)
противном случае используйте обновленный код для API 26. `Вызов конструктора с двумя аргументами. Для совместимости с Android O вызовите support-v4
NotificationCompat.Builder(Context context, String channelId)
. При работе на Android N или более раннихchannelId
версиях будет игнорироваться. При запуске на Android O, также создайтеNotificationChannel
с тем жеchannelId
.Пример кода с устаревшей версией : Пример кода на нескольких страницах JavaDoc, например, вызов Notification.Builder
new Notification.Builder(mContext)
, устарел.Устаревшие конструкторы:
Notification.Builder(Context context)
и v4NotificationCompat.Builder(Context context)
устарели в пользуNotification[Compat].Builder(Context context, String channelId)
. (См. Notification.Builder (android.content.Context) и v4 NotificationCompat.Builder (Контекстный контекст) .)Устаревший класс: весь класс v7
NotificationCompat.Builder
устарел. (См. V7 NotificationCompat.Builder .) РанееNotificationCompat.Builder
для поддержки требовался v7NotificationCompat.MediaStyle
. В Android O, есть v4NotificationCompat.MediaStyle
в медиа-библиотеке Compat «sandroid.support.v4.media
пакет. Используйте это, если вам нужноMediaStyle
.API 14+: в библиотеке поддержки от 26.0.0 и выше пакеты support-v4 и support-v7 поддерживают минимальный уровень API 14. Имена v # являются историческими.
Смотрите последние версии библиотеки поддержки .
источник
Вместо того, чтобы проверять
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
так много ответов, есть несколько более простой способ -Добавьте следующую строку в
application
раздел файла AndroidManifest.xml, как описано в разделе « Настройка клиентского приложения Firebase Cloud Messaging для Android» :Затем добавьте строку с именем канала в файл values / strings.xml :
После этого вы сможете использовать новую версию конструктора NotificationCompat.Builder с 2 параметрами (поскольку старый конструктор с 1 параметром устарел в Android Oreo):
источник
Вот пример кода, который работает в Android Oreo и меньше, чем Oreo.
источник
Простой образец
источник
Правильный код будет:
с зависимостью 26.0.1 и новыми обновленными зависимостями, такими как 28.0.0.
Некоторые пользователи используют этот код в виде этого:
Таким образом, логика - это то, какой метод вы объявите или инициализируете, тогда тот же самый метод на правой стороне будет использоваться для распределения. если в Leftside of = вы будете использовать какой-либо метод, то тот же метод будет использоваться в правой части = для выделения с новым.
Попробуйте этот код ... Он обязательно будет работать
источник
Этот конструктор устарел на уровне API 26.1.0. используйте взамен NotificationCompat.Builder (Context, String). Во всех опубликованных уведомлениях должен быть указан NotificationChannel Id.
источник
источник