Android 尝试使用资源未找到方法 close()

Mar*_*ist 5 java android try-with-resources

我正在使用 android ,它在 android 应用程序中MediaMetaDataRetriever实现。AutoCloseable我有下面的代码

\n
try (final MediaMetadataRetriever retriever = new MediaMetadataRetriever()) {\n    retriever.setDataSource(videoUri.getPath());\n    return retriever.getFrameAtTime(10, getFrameOption());\n}\n
Run Code Online (Sandbox Code Playgroud)\n

最小SDK > 21

\n

但我遇到了以下崩溃

\n

No virtual method close()V in class Landroid/media/MediaMetadataRetriever; or its super classes (declaration of \xe2\x80\x98android.media.MediaMetadataRetriever\xe2\x80\x99 appears in /system/framework/framework.jar

\n

如果MediaMetadataRetriever implements AutoCloseable

\n

MH.*_*MH. 5

怎么会发生这种情况,如果MediaMetadataRetriever implements AutoCloseable

因为直到 API 29MediaMetadataRetriever才实现。因此,在较旧的平台上,该方法不存在,这正是您的崩溃所说的。AutoCloseable close()

在较旧的平台上,您必须(手动)调用release(),这就是close()简单的委托。

不幸的是,这意味着你不能直接使用 try-with-resources (或 Kotlin 的use) with MediaMetadataRetriever,除非你的 minSdk 设置为 29 或更高版本。