Notification.Builder(контекст) устарел Android O
Notification.Builder(контекст) недавно был устаревшим с местом появления каналов уведомлений в Android O.
ПРОБЛЕМА:
После использования Notification.Builder(context, StringID)
вместо Notification.Builder(context)
я получил уведомление на свое устройство Android O.
Однако, попробовав это на Android 23 (M), я не получил уведомление. Я отлаживал свой код, и он просто прекратил выполнение, как только отладчик попал в строку сообщения Notification.Builder(контекст, StringID) на Android 23 (M).
FIX:
Чтобы устранить эту проблему, я использовал условие if/else для разделения между устройствами Android O и остальными устройствами.
У меня есть следующий фрагмент кода:
Notification.Builder notificationBuilder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationBuilder = new Notification.Builder(mContext,
mContext.getResources().getString(R.string.notification_id_channel));
} else {
notificationBuilder = new Notification.Builder(mContext);
}
Lint в Android Studio отображает следующую строку устаревания:
![введите описание изображения здесь]()
Вопрос:
Есть ли способ избавиться от этой строки предупреждения об отказе?
Ответы
Ответ 1
Ваше решение - использовать NotificationCompat.Builder(Context context, String channelId)
. Если вы используете это, вам не нужно проверять уровень API, Builder игнорирует идентификатор канала на устройствах pre-Oreo.
Я тестировал его на API 15, 22, 23 и 26, и он отлично работает.
Ответ 2
У меня была такая же проблема, и поскольку я нацелился на android 22 и 24, я просто сделал это:
Уведомление NotificationCompat.Builder = новый NotificationCompat.Builder(MainActivity.this, "")
Я уверен, что кто-то скажет, что это взломать, но он избавляется от предупреждения, и у меня нет проблем.
Кажется, что пустая строка работает для < android 26.
Возможно, кто-то еще может указать, если это вызывает проблемы для 26.
Спасибо
Ответ 3
Вам нужно определить уникальный channelId (например, "MyChannelId_01" ) и вызвать NotificationCompat.Builder(ctx, "MyChannelId_01" ). Построенное уведомление будет опубликовано в этом NotificationChannel "MyChannelId_01" .
В этом случае вы должны определить важность уведомления (это контролирует, как прерывистые уведомления отправляются на этот канал. Значение: IMPORTANCE_UNSPECIFIED, IMPORTANCE_NONE, IMPORTANCE_MIN, IMPORTANCE_LOW, IMPORTANCE_DEFAULT или IMPORTANCE_HIGH).
Здесь вы можете найти пример: Создание канала уведомлений