FileProvider 调用系统相机拍照 出现on a null object reference的问题

开发过程中需要调用系统照相机拍照并裁剪

对于系统调用相机拍照并保存有点忘记了,于是就直接拿同事的套上用了,结果从相册选中没有问题,但是通过相机拍照却出现了这个问题

‘android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)’ on a null object reference

发现错误所在代码

uri = FileProvider.getUriForFile(UserInfoSetImgActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);

查看该方法

public static Uri getUriForFile(@NonNull Context context, @NonNull String authority, @NonNull File file) {
       final PathStrategy strategy = getPathStrategy(context, authority);
       return strategy.getUriForFile(file);
   }

Debug了下,发现file也不是为空,context也没有问题,那就是authority有问题了
在该方法的上面看到关于这个参数的解释

@param authority The authority of a {@link FileProvider} defined in a
{@code } element in your app’s manifest.
##需要在Manifest文件定义好FileProvider

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

resource下面的定义文件路径


<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
paths>

name可以为其他几个值,这里是设置的是文件保存路径

其中 android:authorities 定义的内容必须和上面参数的一样 否则就会报错
运行一下 果然正常了

总结

其实还是FileProvider没有配置好的问题,配置好就没问题了

8.31更新
一下子过去小半年了,又遇到这个小错误,建议android:authorities 用
BuildConfig.APPLICATION_ID + “.provider”
这样移植代码的时候就不会出现问题也不需要再改了
第一篇博客 记录下日常遇到的坑

你可能感兴趣的:(Android日常开发小知识点,Android)