如果以下链接都没有解决你的这个问题,那么恭喜你,因为你可能找到了真正的答案,废话不多说,我们开始上课,233333!
Android FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题
android.content.res.XmlResourceParser错误
Android开发 android7.0安装apk文件的姿势
由于项目需要,工程结构里依赖了一个moudle,因此项目里除了app主模块,还有一个library.
在app中创建了一个启动相机的Activity,因此,不用多说,肯定要去app的AndroidManifest.Java中配置相关文件,如下:
然后写相关的xml文件如下:
然后我在library中,也创建了一个启动相机的Activity,因此,继续不废话,去library中的AndroidManifest.Java中配置相关文件,如下:
然后写相关的xml文件如下:
然后一切妥当之后,构建项目他会提醒你,如下图:
然后你去 app模块 中的AndroidManifest.Java中添加相关属性,如下图:
然后把项目跑起来,结果就悲剧了,在 启动library中的相机功能 时,是不是类似于一下这样,报空指针:
然后你就将我上面贴的博客中解决方法都试了一遍,然后发现,然并卵?哈哈,有点墨迹,现在说解决方案:
还记得之前在配置过后,构建项目时给了你一个提示,如图:
这个tools:replace属性的意思就是在合并AndroidManifest清单文件时,
本清单文件(app)的android:authorities属性将替换掉其他的清单文件中(library)的相同属性值,
这下你应该明白了,android:authorities属性值是指向的该模块的包名.
也就是说,我启动library中Activity中的启动相机功能,FileProvider.getUriForFile(this, "com.library.library.fileprovider"(library的包名), file))时,他所去查找的是替换过后的app模块下android:authorities属性的路径名,及app的包名,因此,你用library的包名去查,自然而然就报空指针了.
知道了问题所在的原因,那么解决起来就好办了,直接替换包名就好了,将library中的FileProvider.getUriForFile(this, "com.app.app.fileprovider"(改成app的包名), file))这样就OK了.
至于如何灵活去修改包名,这个得看你项目跳转需求了,也就是在另个包跳转到这个包(不同module跳转)时,将另一个包的包名传过来就好.至于如何可以做到不去改包名,也可以完美解决这个问题,我暂时还没找到,有知道的大神,希望能指点一下小弟!
最后,给你一个小提醒:
这也是我在项目中出现过的糗事,就是配置的路径中文件类型一定要一致,如下:
网友评论