Мой ViewModel
класс реализует LifecycleObserver
.Когда я вызываю fragment.lifecycle.addObserver(this)
, это вызывает исключение.
Причина: java.lang.IllegalArgumentException: у класса наблюдателя есть некоторые методы, которые используют более новые API, которые недоступны в текущей версии ОС.Жизненные циклы не могут получить доступ даже к другим методам, поэтому вам следует убедиться, что ваши классы-наблюдатели обращаются только к классам инфраструктуры, доступным на вашем минимальном уровне API, ИЛИ используют lifecycle: процессор аннотаций компилятора.
Странно, но сначала это былоработает нормально, но не так давно это исключение появилось.Я обнаружил, что audioFocusRequest
является причиной этой ошибки.
private val audioFocusRequest by lazy {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(this)
.build() else throw RuntimeException("Can't be done for Android API lower than 26")
}
Кто-нибудь знает, как это можно исправить?
UPD
Пытался использовать annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
, но получил ошибку компиляции: (решил вставить скриншот, потому что целые журналы довольно большие)
UPD 2
В конце я решил удалить поле audioFocusRequest
и использовать старый устаревший метод - requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint)
вместо рекомендованного requestAudioFocus(@NonNull AudioFocusRequest focusRequest)
Это помогло мне снова заставить работать код, поэтому оно можетбыть решением.Но я не нашел ответа - почему появилась эта проблема.Это странно, потому что код раньше работал.
Так что проблема была решена, но вопрос все еще остается без ответа