Notification.Builder(контекст) устарела Android O

Недавно Notification.Builder(context) устарел из-за места размещения каналов уведомлений в Android O.

ПРОБЛЕМА:

После использования Notification.Builder(context, StringID) вместо Notification.Builder(context)Я получил уведомление на устройство Android O.
Однако после того, как я попробовал это на Android 23 (M), я не получил уведомление. Я отладил свой код, и он просто перестал выполняться, как только отладчик попал в строку сообщения Notification.Builder(context, 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 отображает следующую строку устаревания:

ВОПРОС:

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

3 ответа

Решение

Ваше решение заключается в использовании NotificationCompat.Builder(Context context, String channelId), Если вы используете это, вам не нужно проверять уровень API, Builder игнорирует идентификатор канала на устройствах до Oreo.

Я проверил его на API 15, 22, 23 и 26, и он отлично работает.

Вы должны определить уникальный идентификатор канала (например, "MyChannelId_01") и вызвать NotificationCompat.Builder (ctx, "MyChannelId_01"). Построенное уведомление будет размещено в этом канале уведомлений "MyChannelId_01".

Это позволяет вам определять важность уведомления (это контролирует, насколько прерывающие уведомления публикуются на этом канале. Значение: IMPORTANCE_UNSPECIFIED, IMPORTANCE_NONE, IMPORTANCE_MIN, IMPORTANCE_LOW, IMPORTANCE_DEFAULT или IMPORTANCE_HIGH).

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

У меня была та же проблема, и так как я нацелился на Android 22 и 24, я просто сделал это: NotificationCompat.Buildertification = new NotificationCompat.Builder(MainActivity.this, "")

Я уверен, что кто-то скажет, что это взлом, но он избавляется от предупреждения, и у меня нет проблем.

Кажется, передача пустой строки работает на

Может быть, кто-то еще может заявить, если это вызывает проблемы для 26.

Спасибо

Другие вопросы по тегам