开发谷歌服务文字检测App时遇@xml/provider_paths资源未找到错误
解决FileProvider报错:No resource found that matches '@xml/provider_paths'
嘿,这个问题我做图片识别类App的时候也踩过坑!你碰到的这个错误本质很简单——你的项目里还没创建FileProvider必须的路径配置文件,跟着下面的步骤走就能搞定:
1. 先确认Manifest里的Provider配置
首先得确保AndroidManifest.xml里的FileProvider配置是完整的(看你贴的代码应该已经加了,但再核对下):
<application ...> <!-- 其他配置 --> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> <!-- 就是这里找不到文件! --> </provider> </application>
这里的@xml/provider_paths就是报错的根源——系统找不到这个XML文件,因为你还没创建它。
2. 创建xml目录和配置文件
- 打开你的Android项目,找到
res目录,右键点击 → New → Android Resource Directory - 在弹出的窗口里,Resource type选择
xml,点击OK,这样就生成了res/xml/目录 - 接着在
res/xml/目录下新建一个XML文件,命名为provider_paths.xml
3. 配置路径规则
根据你的App需求(比如共享相机拍摄的图片、外部存储文件),在provider_paths.xml里写入对应的路径配置。举个常用的例子,支持共享外部存储和应用内部存储的文件:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 共享外部存储根目录下的所有文件 --> <external-path name="external_storage" path="." /> <!-- 共享应用内部存储的文件目录 --> <files-path name="internal_files" path="." /> <!-- 如果是相机拍摄的图片,可以指定到DCIM目录,更安全 --> <external-files-path name="camera_photos" path="DCIM/" /> </paths>
name是给这个路径起的别名,避免暴露真实路径path指定具体的目录,.表示该目录下的所有文件和子目录
4. 同步项目验证
做完上面的步骤后,点击Android Studio工具栏的Sync Project with Gradle Files按钮,等同步完成,这个报错就应该消失了。
另外提醒一句:如果你的项目用的是AndroidX,一定要用androidx.core.content.FileProvider;如果是老的Support库,才用android.support.v4.content.FileProvider,别搞混了哦!
内容的提问来源于stack exchange,提问作者Gene Xu
相关产品推荐
相关产品推荐

