开发过程中需要调用系统照相机拍照并裁剪
对于系统调用相机拍照并保存有点忘记了,于是就直接拿同事的套上用了,结果从相册选中没有问题,但是通过相机拍照却出现了这个问题
‘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下面的定义文件路径
<?xml version="1.0" encoding="utf-8"?>
<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”
这样移植代码的时候就不会出现问题也不需要再改了
第一篇博客 记录下日常遇到的坑