我正在使用android MediaMetaDataRetriever
,它在android应用程序中实现了AutoCloseable
。
try (final MediaMetadataRetriever retriever = new MediaMetadataRetriever()) {
retriever.setDataSource(videoUri.getPath());
return retriever.getFrameAtTime(10, getFrameOption());
}
最小SDK〉21
但我收到了以下崩溃消息No virtual method close()V in class Landroid/media/MediaMetadataRetriever; or its super classes (declaration of ‘android.media.MediaMetadataRetriever’ appears in /system/framework/framework.jar
如果MediaMetadataRetriever implements AutoCloseable
,这怎么可能发生
2条答案
按热度按时间piah890a1#
我遇到了同样的问题,所以我在Kotlin中创建了自己的MediaMetaDataRetriever子类:
Java(未测试):
2ul0zpep2#
如果
MediaMetadataRetriever implements AutoCloseable
.这怎么可能发生?因为
MediaMetadataRetriever
直到API 29才实现AutoCloseable
。所以在较旧的平台上,close()
方法不存在,这正是您的崩溃也在说的。在较旧的平台上,您必须(手动)调用
release()
,这是close()
简单地委托给它的。不幸的是,这意味着您不能将try-with-resources(或Kotlin的
use
)直接用于MediaMetadataRetriever
,除非您的minSdk设置为29或更高。