如何为同一个FileProvider配置多个authorities解决运行崩溃问题
崩溃原因
Android Manifest的android:authorities属性本身确实支持分号分隔多个值,但FileProvider的官方实现并未适配多authority场景,它初始化时会直接把android:authorities的完整取值当作单一authority去查找对应的meta-data配置,因此会抛出你遇到的非法参数异常。
解决方案
无需强行给同一个FileProvider实例配置多authority,通过注册两个独立的Provider节点即可解决:
- 先创建一个空类继承FileProvider,不需要重写任何方法:
// 已适配AndroidX的导入写法,用support库则替换为对应包名 import androidx.core.content.FileProvider; public class CustomFileProvider extends FileProvider { }
- 在AndroidManifest.xml中注册两个Provider节点,分别对应两个库要求的authority,两者可共用同一份路径配置:
<!-- 适配要求 ${applicationId}.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/file_paths"/> </provider> <!-- 适配要求 ${applicationId}.provider 的库 --> <provider android:name=".CustomFileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> </provider>
内容的提问来源于stack exchange,提问作者tendai
相关产品推荐
相关产品推荐

