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. Спасибо