Essentials icon indicating copy to clipboard operation
Essentials copied to clipboard

[Bug] MediaPicker.CapturePhotoAsync can't capture image on Android 4.4

Open stalexig opened this issue 4 years ago • 3 comments

Description

On Android 4.4 when I try to capture image with the MediaPicker.CapturePhotoAsync() method, the camera opens, I can take a photo, but than the message "Unfortunately, Camera has stopped" appears and CapturePhotoAsync method returns null.

In android manifest I have set all required permissions:

  • android.permission.CAMERA
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

In Logcat I found the following error message:

02-08 10:58:16.211 1612-1780/system_process W/ActivityManager: Permission Denial: opening provider xamarin.essentials.fileProvider from ProcessRecord{9e350488 20610:com.android.camera/u0a30} (pid=20610, uid=10030) that is not exported from uid 10061 02-08 10:58:16.211 20610-20610/com.android.camera E/AndroidRuntime: FATAL EXCEPTION: main Process: com.android.camera, PID: 20610 java.lang.IllegalStateException: Could not execute method of the activity at android.view.View$1.onClick(View.java:3823) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at android.view.View$1.onClick(View.java:3818) at android.view.View.performClick(View.java:4438)  at android.view.View$PerformClick.run(View.java:18422)  at android.os.Handler.handleCallback(Handler.java:733)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5017)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.SecurityException: Permission Denial: opening provider xamarin.essentials.fileProvider from ProcessRecord{9e350488 20610:com.android.camera/u0a30} (pid=20610, uid=10030) that is not exported from uid 10061 at android.os.Parcel.readException(Parcel.java:1465) at android.os.Parcel.readException(Parcel.java:1419) at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2848) at android.app.ActivityThread.acquireProvider(ActivityThread.java:4415) at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2207) at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1425) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:906) at android.content.ContentResolver.openOutputStream(ContentResolver.java:669) at android.content.ContentResolver.openOutputStream(ContentResolver.java:645) at com.android.camera.Camera.doAttach(Camera.java:1385) at com.android.camera.Camera.onReviewDoneClicked(Camera.java:1362) at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at android.view.View$1.onClick(View.java:3818)  at android.view.View.performClick(View.java:4438)  at android.view.View$PerformClick.run(View.java:18422)  at android.os.Handler.handleCallback(Handler.java:733)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5017)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)  at dalvik.system.NativeStart.main(Native Method) 

Steps to Reproduce

  1. On Android 4.4 call MediaPicker.CapturePhotoAsync() method
  2. When the camera opens, take a photo

Expected Behavior

The photo is successfully captured

Actual Behavior

The photo is not captured, CapturePhotoAsync returns null, the message "Unfortunately, Camera has stopped" appears.

stalexig avatar Feb 08 '21 13:02 stalexig

Same thing happening for me

woutermeuwis avatar May 19 '21 11:05 woutermeuwis

I am also experiencing this, has anyone found a suitable workaround?

flanni123 avatar Jun 08 '21 07:06 flanni123

has anyone found a solution yet?

KhaledGaber avatar Apr 18 '22 11:04 KhaledGaber