Android FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题
来源:互联网 发布:svm算法原理 编辑:程序博客网 时间:2024/06/10 14:29
项目中配置FileProvider,运行报错android.content.res.XmlResourceParser错误。
ava.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 reference at android.support.v4.content.FileProvider.parsePathStrategy(FileProvider.java:583) at android.support.v4.content.FileProvider.getPathStrategy(FileProvider.java:557) at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:399)
Debug调试
根据报错的代码,最后锁定在FileProvider#parsePathStrategy()中,其源码如下:
private static PathStrategy parsePathStrategy(Context context, String authority) throws IOException, XmlPullParserException { final SimplePathStrategy strat = new SimplePathStrategy(authority); final ProviderInfo info = context.getPackageManager() .resolveContentProvider(authority, PackageManager.GET_META_DATA); final XmlResourceParser in = info.loadXmlMetaData( context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS); if (in == null) { throw new IllegalArgumentException( "Missing " + META_DATA_FILE_PROVIDER_PATHS + " meta-data"); } // ............ return strat; }
debug调试发现,源码中的info对象为空,因此推断出authority有问题,没有找到。既然authority不存在,肯定是配置有问题。
查找配置
先查看AndroidManifest.xml中FileProvider配置:
<!-- FileProvider配置访问路径,适配7.0及其以上 --> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider>
在查看调用时候,在 FileProvider.getUriForFile()中传入的authorities:
FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",new File(picturePath))
这就奇怪了,感觉没错呀。 这时候,很大可能就是导入BuildConfig错误了,查看导入包。
package xingencom.easypermissiondemo.utils;import android.support.v4.BuildConfig;
果然如此,错误导入v4包下的BuildConfig。这导致配置的authority与传入的authority不一样,当然会报错的啦。
正确的做法:
导入自己项目的包下的BuildConfig。
//导入自己项目的包import com.xingen.easypermissiondemo.BuildConfig;FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID+".provider",new File(picturePath))
阅读全文
1 0
- Android FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题
- android.content.pm.IPackageInstallObserver
- 【Android Exception】android.content.pm.PackageManager$NameNotFoundException
- Unable to get provider android.support.v4.content.FileProvider
- android.content.pm包详细分析
- 版本问题android1.5以后没有android.content.pm.IPackageInstallObserver包
- Android 报错 content.res.Resources$NotFoundException
- android.content.pm.PackageManager$NameNotFoundException: com.google.android.webview错误
- android root环境下pm命令报错 [1] + Stopped (signal) pm
- Android 7.0 FileProvider
- Android 7.0 FileProvider 使用说明
- Android N : FileProvider
- Android 7.0中FileProvider
- Android FileProvider的理解
- android N FileProvider使用方法
- Android FileProvider的使用
- Android 7.0配置fileprovider共享文件 解决FileUriExposedException
- TakePhoto和蒲公英(pgyer)的android.support.v4.content.FileProvider冲突
- C++基础语法-02-运算符重载
- c++二个矩形的位置关系,新手写(无难点)
- NOIP2017_提高组_复赛_DAY1
- MySQL的一些基本语句
- out关键字和ref案例
- Android FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题
- 关于less
- NOIP2017普及组题解
- open pluggable db 出现的错误
- 1072. 开学寄语(20)——C语言
- 自己动手写泛型dao
- pangolin简单学习 一
- Android 使用CMake 编译NDK
- 轮播图实战