美文网首页
记一次FileProvider引发的崩溃

记一次FileProvider引发的崩溃

作者: Lucky丶夏日 | 来源:发表于2019-05-06 15:40 被阅读0次

前言

在安卓7.0之后的系统中,我们想从文件中获取Uri必须使用FileProvider,这点相信大家都知道。使用FileProvider来进行安卓7.0及以上的系统的适配时,我们要先在清单文件里加入如下配置:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${JPUSH_PKGNAME}.FileProvider"
            android:exported="false"
            tools:replace="android:authorities"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

这里有两个需要注意的点,一旦搞错就会崩溃。

注意点

1.android:authorities

这个字段是包名+"."+自定义的FileProvider名称,authorities一定要与代码中调用的名称一致,见以下代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(_mActivity, BuildConfig.APPLICATION_ID + ".FileProvider", apkFile);
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        }
 else 
        ...
2.android:resource

这个字段指向一个xml的路径,此xml申明文件存放的位置。如果有多个xml需要配置(比如有的照片选择库需要配置android:resource,再比如融云即时通讯也需要配置android:resource),那么我们就需要对两种xml的内容进行合并,让App使用的FileProvider的path都是一样的(即不同Module引用的xml可以不一样,但里面的内容要一样,因为都是给主Module使用的)。

相关文章

网友评论

      本文标题:记一次FileProvider引发的崩溃

      本文链接:https://www.haomeiwen.com/subject/bqxdoqtx.html