Подтвердить что ты не робот

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 отображает следующую строку устаревания:

введите описание изображения здесь

Вопрос:

Есть ли способ избавиться от этой строки предупреждения об отказе?

4b9b3361

Ответ 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).

Здесь вы можете найти пример: Создание канала уведомлений