LifecycleObserver使用使用较新API的方法产生异常

And*_*sky 5 android android-lifecycle kotlin fragment-lifecycle

我的ViewModel课实施LifecycleObserver。当我打电话fragment.lifecycle.addObserver(this)时会产生异常。

原因:java.lang.IllegalArgumentException:该观察器类具有一些使用较新API的方法,而这些API在当前OS版本中不可用。生命周期甚至无法访问其他方法,因此您应确保观察者类仅访问最小API级别中可用的框架类,或使用lifecycle:compiler注释处理器。

奇怪的是,首先它运行良好,但不久前出现了这种异常。我发现,这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")
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决?

UPD

尝试使用annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version",但出现编译错误: 在此处输入图片说明 (决定粘贴屏幕截图,因为整个日志都很大)

UPD 2
最后,我决定删除audioFocusRequest字段并使用旧的不赞成使用的方法- requestAudioFocus(OnAudioFocusChangeListener l, int streamType, int durationHint)而不是推荐requestAudioFocus(@NonNull AudioFocusRequest focusRequest)

它帮助我使代码重新工作,因此可以解决。但是我没有找到答案-为什么这个问题出现了。这很奇怪,因为代码以前曾经可以工作。

因此问题已经解决,但问题仍然没有答案

小智 6

尝试使用 kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"