背景:测试某天突然和我说图片选择框架的拍照功能用不了,点击就崩溃,但是我记得这个是用的第三方的框架,之前的版本都没问题,也没人反馈过啊,吓得我连忙对测试说看看线上版本有没有问题,得到的反馈是没有问题。看了一下提交记录也没人动啊,为啥就突然不行了呢。
先把整个流程贴出来然后再把自己踩坑的地方贴出来
自定义一个类继承原本的FileProvider
public class PictureFileProvider extends FileProvider {
}
在你的xml文件夹增加
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path
name="camera_photos"
path="" />
</paths>
</resources>
最后在你的清单文件中添加
<provider
android:name="你的provider位置"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/你的path />
</provider>
使用的时候
private Uri parUri(File cameraFile) {
Uri imageUri;
String authority = getPackageName() + ".provider";
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
//通过FileProvider创建一个content类型的Uri
imageUri = FileProvider.getUriForFile(mContext, authority, cameraFile);
} else {
imageUri = Uri.fromFile(cameraFile);
}
return imageUri;
}
根据网上的方案说是可能存在读不到外载的SD卡的路径,把external-path
改成root-path可能会有用,但是在我这里没用,而且debug发现使用的时候文件的路径是能够正确获取,权限也不存在问题。还把一系列的path都列了一遍还是不行啊。
最后是发现的在最新的代码当中,在当前的项目当中新建了一个file_path的文件,而恰恰在第三方的xml文件的命名也是这个,随便改一个重复命名这个问题就解决了。
如果这篇文章对你有帮助就帮忙点个赞吧