Android中使用FileProvider生成外部图片目录URI的正确authority是什么?
要解决这个问题,核心是调用FileProvider.getUriForFile()时传入的authority必须和AndroidManifest.xml中注册FileProvider时配置的authority完全一致,同时还要确保路径配置正确。以下是具体步骤:
第一步:检查AndroidManifest.xml的FileProvider注册
确保你的清单文件中已经正确注册FileProvider,并且android:authorities的值明确。示例配置如下:<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/file_paths" /> </provider>这里
${applicationId}会被Gradle自动替换为你的应用实际包名(比如com.example.myapp),所以最终的authority就是你的包名.fileprovider,调用时必须严格使用这个值。第二步:确认file_paths.xml路径配置正确
在res/xml目录下创建file_paths.xml,根据你创建文件的方式配置对应路径:- 如果文件是通过
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)创建的,配置:<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="public_pictures" path="Pictures/" /> </paths> - 如果文件是通过
context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)创建的,配置:<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-files-path name="app_pictures" path="Pictures/" /> </paths>
路径配置错误会直接导致无法生成有效URI。
- 如果文件是通过
第三步:调用时的正确写法
建议通过getPackageName()动态获取包名拼接authority,避免硬编码错误:String authority = context.getPackageName() + ".fileprovider"; Uri uri = FileProvider.getUriForFile(context, authority, file);同时要确保调用前
file.exists()返回true,文件不存在也会导致返回空URI。额外排查点
确认编译SDK28对应的AndroidX依赖版本正确,避免因依赖冲突导致FileProvider功能异常。
内容的提问来源于stack exchange,提问作者Hariharakrishnan Mannarsamy
相关产品推荐
相关产品推荐

