Android中如何将File转为content://格式URI?解决FileProvider报错
问题解决:FileProvider权限不匹配导致的IllegalArgumentException
错误根本原因
你在AndroidManifest.xml中注册FileProvider时指定的权限字符串(authorities),和调用FileProvider.getUriForFile()时传入的权限字符串不一致,导致系统无法找到对应的Provider配置信息。
两种修复方案(二选一即可)
方案1:修改代码中的权限字符串,与Manifest配置匹配
将转换代码中的权限部分从.fileprovider改为.provider,和Manifest里的${applicationId}.provider保持一致:
selectedFileUri = FileProvider.getUriForFile(requireContext(), BuildConfig.APPLICATION_ID + ".provider", file)
方案2:修改Manifest中的authorities值,与代码匹配
将Manifest里的authorities属性值从.provider改为.fileprovider,和代码里的BuildConfig.APPLICATION_ID + ".fileprovider"保持一致:
<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>
额外注意事项
- 确保
res/xml/provider_paths.xml的文件名和Manifest中meta-data的resource指向完全一致(你的当前配置是正确的) meta-data的name属性使用android.support.FILE_PROVIDER_PATHS是兼容写法,也可以替换为AndroidX标准的androidx.core.content.FileProvider.PATH_PROVIDER_PATHS,两者功能一致
内容的提问来源于stack exchange,提问作者KadKos
相关产品推荐
相关产品推荐

