App crashes after recording video on Android 8 and 9 on SDK 17.3.0 | Community
Skip to main content
 Fatal Exception: java.lang.NoSuchMethodError: 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)
at io.intercom.android.sdk.m5.conversation.utils.URIExtensionsKt.getVideoData(URIExtensions.kt:146)
at io.intercom.android.sdk.m5.conversation.utils.URIExtensionsKt.getMediaData(URIExtensions.kt:51)
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt.ConversationScreen$lambda$29(ConversationScreen.kt:286)
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt.$r8$lambda$l4hfoRjJBkYl_jEYY6YWj7rurp4()
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt$$ExternalSyntheticLambda2.invoke(D8$$SyntheticClass)
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt$ConversationScreenContent$35.invoke$lambda$3$lambda$0(ConversationScreen.kt:572)
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt$ConversationScreenContent$35.$r8$lambda$MT36R_W0lu7CJaCN2e0IiSGbap4()
at io.intercom.android.sdk.m5.conversation.ui.ConversationScreenKt$ConversationScreenContent$35$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass)
at io.intercom.android.sdk.m5.conversation.ui.components.MediaInputSheetContentKt.MediaInputSheetContent$lambda$21$lambda$20$lambda$7$lambda$6(MediaInputSheetContent.kt:62)
at io.intercom.android.sdk.m5.conversation.ui.components.MediaInputSheetContentKt.$r8$lambda$mvyN6K9aCy1SvQn8b70SSpNtHjE()
at io.intercom.android.sdk.m5.conversation.ui.components.MediaInputSheetContentKt$$ExternalSyntheticLambda7.invoke(D8$$SyntheticClass)
at io.intercom.android.sdk.m5.conversation.ui.components.composer.CameraInputButtonKt.CameraInputButton$lambda$5(CameraInputButton.kt:56)
at io.intercom.android.sdk.m5.conversation.ui.components.composer.CameraInputButtonKt.$r8$lambda$rmGZ5r2ShtGD9UWwOYsLqO4lIkQ()
at io.intercom.android.sdk.m5.conversation.ui.components.composer.CameraInputButtonKt$$ExternalSyntheticLambda2.invoke(D8$$SyntheticClass)
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1.invoke$lambda$0(ActivityResultRegistry.kt:104)
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1.$r8$lambda$VLs2Oqd6MzDD-LGilzyhNhDSH_4()
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1$$ExternalSyntheticLambda0.onActivityResult(D8$$SyntheticClass)
at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.kt:350)
at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.kt:311)
at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.kt:756)
at androidx.fragment.app.FragmentActivity.onActivityResult(FragmentActivity.java:151)
at android.app.Activity.dispatchActivityResult(Activity.java:7741)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4750)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4799)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2025)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:226)
at android.app.ActivityThread.main(ActivityThread.java:7191)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:499)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:942)

How can I solve this?

Hi ​@User1810 , Seán here from the Intercom engineering support team 🔧

I think this crash is occuring because MediaMetadataRetriever.close() was only added in Android API level 29 (Android 10), but the SDK is trying to call it on older Android versions, causing a NoSuchMethodError.

The simplest and most reliable solution (if this is the issue) is to replace all MediaMetadataRetriever.close() calls with MediaMetadataRetriever.release(), which is available on all Android API levels and provides identical functionality.

​// Replace this (problematic):
retriever.close()

// With this (compatible):
retriever.release()

Hope this helps! Let me know if the issue still persists after this change.