smuyyh / ImageSelector

:foggy: Android 图片选择器。充分自由定制,极大程度简化使用,支持图库多选/图片预览/单选/照片裁剪/拍照/自定义图片加载方式/自定义色调/沉浸式状态栏
http://blog.csdn.net/yyh352091626/article/details/52154583
Apache License 2.0
1.6k stars 254 forks source link

Android 7.0 Provider must grant uri permissions #168

Closed tangnuo closed 4 years ago

tangnuo commented 4 years ago

2019-11-27 09:47:34.218 5458-5458/? E/AndroidRuntime: Uncaught error process : com.yuyh.imgsel 2019-11-27 09:47:34.221 5458-5458/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.yuyh.imgsel, PID: 5458 java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must grant uri permissions at android.app.ActivityThread.installProvider(ActivityThread.java:5882) at android.app.ActivityThread.installContentProviders(ActivityThread.java:5471) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5410) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1550) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6147) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: java.lang.SecurityException: Provider must grant uri permissions at android.support.v4.content.FileProvider.attachInfo(FileProvider.java:388) at android.app.ActivityThread.installProvider(ActivityThread.java:5879) at android.app.ActivityThread.installContentProviders(ActivityThread.java:5471)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5410)  at android.app.ActivityThread.-wrap2(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1550)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6147)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

LikCodeLab commented 4 years ago

要在xml文件里面的provider 里面配置 android:grantUriPermissions="true" ,至于为什么看下面链接 https://developer.android.google.cn/reference/android/support/v4/content/FileProvider.html 以及FileProvider源码第380行 ` public void attachInfo(@NonNull Context context, @NonNull ProviderInfo info) { super.attachInfo(context, info);

    // Sanity check our security
    if (info.exported) {
        throw new SecurityException("Provider must not be exported");
    }

    if (!info.grantUriPermissions) {
        throw new SecurityException("Provider must grant uri permissions");
    }

    mStrategy = getPathStrategy(context, info.authority);
}

`

smuyyh commented 4 years ago

fixed