ClassCastException: MediaMetadataRetriever не может быть приведен к AutoCloseable

я пытался использовать MediaMetadataRetrieverс Котлином use:

      MediaMetadataRetriever().apply {
    setDataSource(context, uri)
}.use {
    ...
}

Но это дает мне ошибку на Android 6 Marshmallow (23 API):

java.lang.ClassCastException: android.media.MediaMetadataRetriever не может быть приведен к java.lang.AutoCloseable

Почему так?

3 ответа

MediaMetadataRetrieverреализует AutoCloseable начиная с уровня API 29.

Когда вы говорите, что используете метод «Kotlin», я предполагаю, что вы имеете в виду метод вandroidx.core.content.resпакет вandroidx.core:core-ktxбиблиотека.

Но этот не используетAutoCloseableинтерфейс вообще. ВместоMediaMetadataRetrieverclass также предоставляет метод начиная с API 29, как указывает пользователь sdex в своем ответе, который вы могли использовать по ошибке.

Напротив,useметод изandroidxобратно совместим.

Затем вам просто нужно импортировать следующее:

      import androidx.core.content.res.use

Android — это проект с открытым исходным кодом, вы можете проверить исходники для каждой версии. Кажется, он начал реализовывать AutoClosable не так давно

API 28:

      public class MediaMetadataRetriever
{

API 30

      public class MediaMetadataRetriever implements AutoCloseable {
Другие вопросы по тегам