I'm using `moko-media` and `moko-permissions` in C...
# multiplatform
j
I'm using
moko-media
and
moko-permissions
in Compose Multiplatform to open the gallery and select a photo. However, I'm getting a
dev.icerock.moko.permissions.DeniedAlwaysException
error when I call the following code:
Copy code
val mediaFactory = rememberMediaPickerControllerFactory()
val picker = remember(mediaFactory) {  
    mediaFactory.createMediaPickerController() 
}
val coroutineScope = rememberCoroutineScope()

BindMediaPickerEffect(picker)

...

coroutineScope.launch {
    picker.permissionsController.providePermission(Permission.GALLERY)
    if (picker.permissionsController.isPermissionGranted(Permission.GALLERY)) {
        setProfilePictureBitmap(picker.pickImage(MediaSource.GALLERY))
    }
    ...
}
I check my app details on the emulator and it says that Photos and Videos are allowed, not sure what the cause of the issue is. Full error details in replies
Copy code
dev.icerock.moko.permissions.DeniedAlwaysException
	at dev.icerock.moko.permissions.ResolverFragment.requestPermissionLauncher$lambda$1(ResolverFragment.kt:47)
	at dev.icerock.moko.permissions.ResolverFragment.$r8$lambda$xVWh1OMY-jV8sGm90Z_Lnoc0rAA(Unknown Source:0)
	at dev.icerock.moko.permissions.ResolverFragment$$ExternalSyntheticLambda0.onActivityResult(Unknown Source:4)
	at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:418)
	at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:375)
	at androidx.activity.ComponentActivity.onRequestPermissionsResult(ComponentActivity.java:844)
	at androidx.fragment.app.FragmentActivity.onRequestPermissionsResult(FragmentActivity.java:490)
	at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8774)
	at android.app.Activity.dispatchActivityResult(Activity.java:8632)
	at android.app.ActivityThread.deliverResults(ActivityThread.java:5316)
	at android.app.ActivityThread.handleSendResult(ActivityThread.java:5362)
	at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:67)
	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:2307)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7872)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@c23aafc, androidx.compose.runtime.BroadcastFrameClock@430c585, StandaloneCoroutine{Cancelling}@ed0cfda, AndroidUiDispatcher@ad91c0b]
e
looks like Android, so 1. did you update your app manifest? 2. consider using https://developer.android.com/training/data-storage/shared/photopicker instead, it's easier to integrate and a better user experience IMO
j
This is for Compose multiplatform, and if you're talking about adding permissions to manifest then yes I have
a
hi @Justin Xu. can you create reproducer project ? and compare your project with https://github.com/icerockdev/moko-compose-multiplatform-ios-android-template
j
@alex009 Here is a reproducer, calls the media picker using the same code I posted above.
a
hi @Justin Xu. i create PR with fix.
j
Works great now, thanks so much! Really appreciate all of the multiplatform tools you make
679 Views