Couldn’t find meta-data for provider with authority .FileProvider
报错原因
在启动相机的时候,闪退报错,遇到问题直接先百度下,发现是provider的问题,后来发现是在Manifest中
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="xxx.xxx.xxx.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
我们实际中用法
uri = FileProvider.getUriForFile(context.getApplicationContext(), context.getApplicationContext().getPackageName() + ".fileprovider", file);
在源码中
public static Uri getUriForFile(@NonNull Context context, @NonNull String authority,
@NonNull File file) {
final PathStrategy strategy = getPathStrategy(context, authority);
return strategy.getUriForFile(file);
}
authority的值要与Manifest中android:authorities配置的一致,如果还不行的话,可能你跟我一样有多个项目,项目A中依赖了项目B,又有相同的字段,因此出现命名冲突。所以这时候 还得加上
tools:replace="android:authorities"
和
tools:replace="android:resource"
最终代码
<!--Android 7.0本地文件共享 (FileUriExposedException)-->
<!-- authorities:可自定义(一般为 包名 + ".FileProvider")
grantUriPermissions:表示授予 URI 临时访问权限。 -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="xxx.xxx.xxx.fileprovide"
android:exported="false"
tools:replace="android:authorities"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource" />
</provider>
xxx.xxx.xxx一般用你的包名