I am trying to develop a simple app that scan documents. I am using scanlibrary, provided by jhansireddy (https://github.com/jhansireddy/AndroidScannerDemo). I've integrated the library with my actual project, i had done the gradle build.
When I start the activity, i have the options to select a photo from Gallery, or to take a brand new one. In both case, it crashes when it comes to save in the internal memory (requires android.permission.WRITE_EXTERNAL_STORAGE).
Below I will paste the entire error from logcat.
09-09 10:40:51.219 27738-27738/com.example.cosmin.kdocscanner E/MediaStore: Failed to insert image
java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=27738, uid=10158 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1599)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
at android.content.ContentResolver.insert(ContentResolver.java:1251)
at android.provider.MediaStore$Images$Media.insertImage(MediaStore.java:971)
at com.scanlibrary.Utils.getUri(Utils.java:23)
at com.scanlibrary.PickImageFragment.postImagePick(PickImageFragment.java:146)
at com.scanlibrary.PickImageFragment.onActivityResult(PickImageFragment.java:141)
at android.app.Activity.dispatchActivityResult(Activity.java:6487)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3738)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3785)
at android.app.ActivityThread.access$1400(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5525)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
And after this one, another one that I think is a side effect. Meaning that at the point I resolve the first one, it will resolve the other too.
09-09 10:40:51.220 27738-27738/com.example.cosmin.kdocscanner E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.cosmin.kdocscanner, PID: 27738
java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=2, result=-1, data=null} to activity {com.example.cosmin.kdocscanner/com.scanlibrary.ScanActivity}: java.lang.NullPointerException: uriString
at android.app.ActivityThread.deliverResults(ActivityThread.java:3742)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3785)
at android.app.ActivityThread.access$1400(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5525)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by: java.lang.NullPointerException: uriString
at android.net.Uri$StringUri.<init>(Uri.java:475)
at android.net.Uri$StringUri.<init>(Uri.java:465)
at android.net.Uri.parse(Uri.java:437)
at com.scanlibrary.Utils.getUri(Utils.java:24)
at com.scanlibrary.PickImageFragment.postImagePick(PickImageFragment.java:146)
at com.scanlibrary.PickImageFragment.onActivityResult(PickImageFragment.java:141)
at android.app.Activity.dispatchActivityResult(Activity.java:6487)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3738)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3785)
at android.app.ActivityThread.access$1400(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5525)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
I must say that android manifest has already the permission. In fact, both manifest files (The one that belongs to my project, and the one that belongs to the library).
What can be the cause?!