Android7.0对文件的访问,框架使用StrictMode Api禁止我们的应用对外部(跨越应用分享)公开file://,在访问文件时需要增加FileProvider授权,这里不再赘述这个问题;

  当应用中存在多个FileProvider的时候(比如在引入了一个第三方开源,例takePhoto,开源框架为了适配android7.0文件的访问也使用了FileProvider),在编译时便会报错:

在报了错误信息之后androidStudio也给出了一个解决方法,增加 tools:replace="android:authorities"属性,这么一来编译时通过了,但是在使用takePhoto的时候却出现了致命错误UndeclaredThrowableException;

此时我们就会想到使用自定义的FileProvider来避免冲突,既自己写一个FileProvider继承自android.support.v4.content.FileProvider,然后在清单文件里完成配置;特别要注意一点(被这个细节小坑了一下),在配置自定义的FileProvider的时候,resource指向的xml一定要保证唯一,比如takePhoto使用了最原始的命名file_paths.xml,那么自定义的FileProvider需要用另一个xml配置(比如file_paths1.xml),避免takePhoto使用的异常(压缩图片失败等问题), 我自己花了较多的时间解决了这个Bug,希望能帮助后来人。

~~

 

posted on 2017-12-25 10:56  谦谦君子温润如玉  阅读(8250)  评论(0编辑  收藏  举报