ChiliLabs / ChiliPhotoPicker

Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.
Apache License 2.0
405 stars 45 forks source link

Crash when selecting Camera #13

Closed bartekpacia closed 4 years ago

bartekpacia commented 4 years ago

When I open the photo picker fragment and click Camera, I immediately get the following exception:

pl.baftek.discoverrudy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: pl.baftek.discoverrudy, PID: 10220
    java.lang.RuntimeException: Unable to start activity ComponentInfo{pl.baftek.discoverrudy/lv.chi.photopicker.utils.CameraActivity}: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        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:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/pl.baftek.discoverrudy/cache/camera/tmp6252440890878372045.jpg
        at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
        at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
        at lv.chi.photopicker.utils.FileProvidersKt.providerUri(FileProviders.kt:9)
        at lv.chi.photopicker.utils.CameraActivity.provideImageUri(CameraActivity.kt:77)
        at lv.chi.photopicker.utils.CameraActivity.onCreate(CameraActivity.kt:29)
        at android.app.Activity.performCreate(Activity.java:7802)
        at android.app.Activity.performCreate(Activity.java:7791)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        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:2016) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 

What should I do?

I'm on Android 10 and have the following in my AndroidManifest.xml:

<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="pl.baftek.discoverrudy.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

This is file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="Comment images"
        path="Android/data/pl.baftek.discoverrudy/files/Pictures" />
    <external-path
        name="Chili image cache"
        path="/data/data/pl.baftek.discoverrudy/cache/camera" />
</paths>
josercl commented 4 years ago

This is fixed specifying a cache-path in your file provider

i.e.:

<paths>
...
   <cache-path name="cache_files" path="some_cache_path"/>
...
</paths>
bartekpacia commented 4 years ago

shame to say this but I "figured it out" a few days ago, but I forgot how. Will try to post a solution here soon :)

paridhi2509 commented 4 years ago

did you found solution?

bartekpacia commented 4 years ago

oh god, sorry

I did but I forgot to post it and don't remember anything

sorry I'm dumb

koolkiran005 commented 3 years ago

Hi Team,

I got the solution for this by implementing like below

/**file_paths.xml**/ <?xml version="1.0" encoding="utf-8"?>

/* In Manifest file inside application***/

<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/>

/* In Manifest file outside application***/