Android try with resources no method found close()

Viewed 418

I am using android MediaMetaDataRetriever which implements AutoCloseable in an android application. I have the below code

try (final MediaMetadataRetriever retriever = new MediaMetadataRetriever()) {
    retriever.setDataSource(videoUri.getPath());
    return retriever.getFrameAtTime(10, getFrameOption());
}

minSDK > 21

but I am getting the following crash

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

how can this happen if MediaMetadataRetriever implements AutoCloseable

1 Answers

I had the same problem, so I created my own subclass of MediaMetaDataRetriever in Kotlin:

class MyMediaMetadataRetriever : MediaMetadataRetriever(), AutoCloseable {

   override fun close() {
      release()
   }

}

Java (untested):

public class MyMediaMetadataRetriever extends MediaMetadataRetriever implements AutoCloseable {

   public MyMediaMetadataRetriever() {
      super();
   }

   @Override
   public void close() {
      release();
   }

}
Related