XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,
android開(kāi)發(fā)之多個(gè)provider的解決方法:
下面的報(bào)錯(cuò)針對(duì)android7.0及以上都是一個(gè)問(wèn)題就是provider的authorities沒(méi)有對(duì)上。
看下報(bào)錯(cuò)代碼:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object referenceat android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:604)at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:578)at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:416)at com.mchsdk.paysdk.utils.YhshUtils.install(YhshUtils.java:147)at com.mchsdk.paysdk.utils.YhshUtils.access$200(YhshUtils.java:53)at com.mchsdk.paysdk.utils.YhshUtils$1.onSuccess(YhshUtils.java:113)at com.lidroid.xutils.http.HttpHandler.onProgressUpdate(HttpHandler.java:218)at com.lidroid.xutils.task.PriorityAsyncTask$InternalHandler.handleMessage(PriorityAsyncTask.java:385)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6669)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)出現(xiàn)上面問(wèn)題的原因很多:我說(shuō)下我遇到的
我這邊是SDK有一份provider自己APP也有一份provide然后因?yàn)槎际嵌x的android.support.v4.content.FileProvider雖然authorities不同但是經(jīng)過(guò)我測(cè)試這樣后者的provider會(huì)被覆蓋,也就是說(shuō)當(dāng)后者的provider去查找authorities的時(shí)候查找的是前者的authorities導(dǎo)致找不到指定的路徑就報(bào)錯(cuò)了,這種有多個(gè)provider的沖突問(wèn)題解決辦法非常簡(jiǎn)單
直接自定義Provider即可:
package com.xigu.zhenghesdk.demo;import android.support.v4.content.FileProvider;/*** @author Xiayiye5* 2020年8月5日11:09:51* 下面自定義FileProvider是為了解決游戲里面已定義了FileProvider的沖突問(wèn)題* 如果你項(xiàng)目使用的最新androidX 庫(kù),FileProvider導(dǎo)入使用:androidx.core.content.FileProvider* 如果你使用的非androidX庫(kù),FileProvider導(dǎo)入使用:android.support.v4.content.FileProvider*/ public class XiaYiYe5FileProvider extends FileProvider {public XiaYiYe5FileProvider() {} }新建provider如上圖:然后在清單文件匯總配置下即可:
<!--配置Android7.0保存文件的路徑--><!--請(qǐng)將com.xigu.zhenghesdk.demo改成你自己的游戲包名--><providerandroid:name="com.xigu.zhenghesdk.demo.XiaYiYe5FileProvider"android:authorities="${applicationId}.xiayiye5"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/apk_paths" /></provider>個(gè)人建議:
1.上圖代碼中的authorities這個(gè)值一定要做到唯一不要和別的provider的authorities名字一樣
2.上圖中的resource資源路勁也盡量保持名字不重復(fù)例如我下載apk路勁定義的名字叫apk_paths
3.上圖authorities的值一定要和你安裝apk的值一致否則報(bào)錯(cuò)如下圖一致:
總結(jié)
以上是生活随笔為你收集整理的XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager,的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: DOM是什么意思
- 下一篇: 苹果xs max防水吗
