expo-music-picker
expo-music-picker copied to clipboard
Crash on Android 12 after pick music track
Hi,
Nice idea - looking forward to getting it working on Android ! Have got the bluetooth side of things working on some 'Arduino-like' hardware, but having problems with the music picker: the application crashes with the below error message. If I select a track with the native music picker it will start playing, but as soon as I click on 'Done' it crashes. Note that it doesn't get as far as the check to see if the result has been cancelled: I put in a console.log just after the return from 'openMusicLibraryAsync' which doesn't get called. I also put in a call to 'requestPermissionsAsync' which correctly asked me for permissions the first time.
Crash trace: Your app just crashed. See the error below.
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2317, result=-1, data=Intent { dat=content://media/external/audio/media/14 typ=audio/mpeg flg=0x1 }} to activity {com.barthap.expomegademo/com.barthap.expomegademo.MainActivity}: java.lang.IllegalArgumentException: Invalid column last_modified
at android.app.ActivityThread.deliverResults(ActivityThread.java:5946)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5985)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
at Caused By android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:481)
at android.content.ContentResolver.query(ContentResolver.java:1226)
at android.content.ContentResolver.query(ContentResolver.java:1158)
at android.content.ContentResolver.query(ContentResolver.java:1114)
at expo.community.modules.musicpicker.MusicMetadataResolver.getDirectUriInfo(MusicMetadataResolver.kt:162)
at expo.community.modules.musicpicker.MusicMetadataResolver.getMusicMetadata(MusicMetadataResolver.kt:46)
at expo.community.modules.musicpicker.MusicPickerModule.getMusicMetadata(MusicPickerModule.kt:92)
at expo.community.modules.musicpicker.MusicPickerModule.processPickerResult(MusicPickerModule.kt:109)
at expo.community.modules.musicpicker.MusicPickerModule.access$processPickerResult(MusicPickerModule.kt:37)
at expo.community.modules.musicpicker.MusicPickerModule$definition$lambda-5$$inlined$OnActivityResult$1.invoke(ModuleDefinitionBuilder.kt:604)
at expo.community.modules.musicpicker.MusicPickerModule$definition$lambda-5$$inlined$OnActivityResult$1.invoke(ModuleDefinitionBuilder.kt:597)
at expo.modules.kotlin.events.EventListenerWithSenderAndPayload.call(EventListener.kt:37)
at expo.modules.kotlin.ModuleHolder.post(ModuleHolder.kt:40)
at expo.modules.kotlin.ModuleRegistry.post(ModuleRegistry.kt:67)
at expo.modules.kotlin.AppContext.onActivityResult(AppContext.kt:167)
at expo.modules.kotlin.ReactLifecycleDelegate.onActivityResult(ReactLifecycleDelegate.kt:33)
at com.facebook.react.bridge.ReactContext.onActivityResult(ReactContext.java:328)
at com.facebook.react.ReactInstanceManager.onActivityResult(ReactInstanceManager.java:828)
at com.facebook.react.ReactDelegate.onActivityResult(ReactDelegate.java:90)
at com.facebook.react.ReactActivityDelegate.onActivityResult(ReactActivityDelegate.java:113)
at expo.modules.ReactActivityDelegateWrapper.onActivityResult(ReactActivityDelegateWrapper.kt:145)
at com.facebook.react.ReactActivity.onActivityResult(ReactActivity.java:70)
at android.app.Activity.dispatchActivityResult(Activity.java:8659)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5939)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5985)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Any ideas ?
Thanks,
Nic
Moved this to expo-music-picker
repo as it is directly related to the music picker module, rather than the demo app.
The hotfix for this is to comment-out a few lines in expo-music-picker/android/src/main/java/expo/community/modules/musicpicker/MusicMetadataResolver.kt
:
diff --git a/node_modules/expo-music-picker/android/src/main/java/expo/community/modules/musicpicker/MusicMetadataResolver.kt b/node_modules/expo-music-picker/android/src/main/java/expo/community/modules/musicpicker/MusicMetadataResolver.kt
index d8f0aec..047c1e8 100644
--- a/node_modules/expo-music-picker/android/src/main/java/expo/community/modules/musicpicker/MusicMetadataResolver.kt
+++ b/node_modules/expo-music-picker/android/src/main/java/expo/community/modules/musicpicker/MusicMetadataResolver.kt
@@ -156,7 +156,7 @@ internal class MusicMetadataResolver(
// MediaStore.Audio.AudioColumns._ID,
// DocumentsContract.Document.COLUMN_DOCUMENT_ID,
DocumentsContract.Document.COLUMN_DISPLAY_NAME,
- DocumentsContract.Document.COLUMN_LAST_MODIFIED
+// DocumentsContract.Document.COLUMN_LAST_MODIFIED
)
return appContext.reactContext!!.contentResolver.query(
@@ -171,15 +171,15 @@ internal class MusicMetadataResolver(
}
val fileNameIndex = cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_DISPLAY_NAME)
- val lastModifiedIndex = cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_LAST_MODIFIED)
+ // val lastModifiedIndex = cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_LAST_MODIFIED)
val fileName = cursor.getString(fileNameIndex)
- val lastModified = cursor.getInt(lastModifiedIndex)
+// val lastModified = cursor.getInt(lastModifiedIndex)
return@use MusicMetadata(
uri,
fileName = fileName,
- dateAdded = lastModified
+ // dateAdded = lastModified
)
}
}
Thanks ! Thought something like this might fix it, but it being deep in the Kotlin didn't want to start hacking about with it.
Not quite there yet, but further forwards !