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
интерфейс вообще. ВместоMediaMetadataRetriever
class также предоставляет метод начиная с 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 {