icerockdev / moko-media

Media selection & presenting for mobile (android & ios) Kotlin Multiplatform development
https://moko.icerock.dev/
Apache License 2.0
101 stars 12 forks source link

java.lang.ClassCastException ( MediaPickerFragment cannot be cast to ImagePickerFragment) #72

Open umesh0492 opened 8 months ago

umesh0492 commented 8 months ago
coroutineScope.launch {
                            //var image: ImageBitmap? by remember { mutableStateOf(null) }
                            val result = picker.pickImage(MediaSource.CAMERA)
                            try {
                                result.toImageBitmap()
                            } catch (e: Exception) {

                            }
                        }
java.lang.ClassCastException: dev.icerock.moko.media.picker.MediaPickerFragment cannot be cast to dev.icerock.moko.media.picker.ImagePickerFragment
                                                                                                        at dev.icerock.moko.media.picker.MediaPickerControllerImpl.pickImage(MediaPickerControllerImpl.kt:62)
                                                                                                        at dev.icerock.moko.media.picker.MediaPickerControllerImpl.pickImage(MediaPickerControllerImpl.kt:44)
umesh0492 commented 8 months ago

With dev.icerock.moko:media:0.11.0 dev.icerock.moko:media-compose:0.11.0

davgdafa commented 7 months ago

I think you need to add all permissions for all versions in the AndroidManifest of the Android app as in here:


    <!-- Devices running Android 12L (API level 32) or lower  -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

    <!-- Devices running Android 13 (API level 33) or higher -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"  />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

    <!-- To handle the reselection within the app on Android 14 (API level 34) -->
    <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />

That worked for me.

anton-veretenenko commented 4 months ago

got that exception too, code to reproduce

picker.pickImage(MediaSource.CAMERA)
picker.pickMedia()

so exception happens when you try to use several pickers from the same composable, because pickerFragmentTag is always the same