安卓7.0以上版本更新apk报错
由于项目需求,项目组的老代码需要推翻重写,现以7.0系统基础上,安装apk时崩溃了,异常:
FATAL EXCEPTION: main
Process: com.hx.newzszz302, PID: 27179
android.os.FileUriExposedException: file:///storage/emulated/0/ZSDX203/download/2.0.1zsdx.apk exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1816)
at android.net.Uri.checkFileUriExposed(Uri.java:2350)
at android.content.Intent.prepareToLeaveProcess(Intent.java:9076)
at android.content.Intent.prepareToLeaveProcess(Intent.java:9037)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1530)
at android.app.ContextImpl.startActivity(ContextImpl.java:881)
at android.app.ContextImpl.startActivity(ContextImpl.java:851)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:356)
at com.hx.newzszz.common.utils.FileUtils.installApk(FileUtils.java:106)
at com.hx.newzszz.splash.SplashPresenter.updateApk(SplashPresenter.java:167)
at com.hx.newzszz.splash.SplashActivity$2.update(SplashActivity.java:122)
at com.hx.newzszz.common.widget.UpdateApkDialog.onClick(UpdateApkDialog.java:92)
at android.view.View.performClick(View.java:5646)
at android.view.View$PerformClick.run(View.java:22450)
at android.os.Handler.handleCallback(Handler.java:755)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6524)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
这就十分蛋疼了,运行了一下老代码,发现并没有报错,照样跑,于是百度发现,原来是7.0作祟。
查看了几位大神的博客,发现解决方法如下:
1、在AndroidManifest.xml中添加provider
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.hx.newzszz.fileProvider"android:grantUriPermissions="true"android:exported="false"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>
2、根据AndroidManifest.xml中添加的provider创建资源文件
内容:
<?xml version="1.0" encoding="utf-8"?>
<paths><external-pathname="files_root"path="Android/data/com.hx.newzszz/" />//此处填写包名<external-pathname="external_storage_root"path="." />
</paths>
3、安装代码:
/*** 安装Apk** @param apkFile*/public static void installApk(File apkFile) {Intent intent = new Intent(Intent.ACTION_VIEW);//判断是否是AndroidN以及更高的版本if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Uri contentUri = FileProvider.getUriForFile(ZszzApplication.getInstance(),BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);intent.setDataAndType(contentUri, "application/vnd.android.package-archive");} else {intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);}ZszzApplication.getInstance().startActivity(intent);}
另外:!!经过改动后,终于以为可以跑了,结果又报错了,这个错误最坑:
这是因为步骤3中红色部位
".fileProvider"
和步骤1中的
android:authorities="com.hx.newzszz.fileProvider"的
.fileprovider"
不一致,这就导致后面调用
final ProviderInfo info = context.getPackageManager().resolveContentProvider(authority, PackageManager.GET_META_DATA);
final XmlResourceParser in = info.loadXmlMetaData(context.getPackageManager(), META_DATA_FILE_PROVIDER_PATHS);
方法时会空指针
E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.hx.newzszz, PID: 26387java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.PackageItemInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object referenceat 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)at com.hx.newzszz.common.utils.FileUtils.installApk(FileUtils.java:102)at com.hx.newzszz.splash.SplashPresenter.updateApk(SplashPresenter.java:167)at com.hx.newzszz.splash.SplashActivity$2.update(SplashActivity.java:122)at com.hx.newzszz.common.widget.UpdateApkDialog.onClick(UpdateApkDialog.java:92)at android.view.View.performClick(View.java:5646)at android.view.View$PerformClick.run(View.java:22450)at android.os.Handler.handleCallback(Handler.java:755)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:156)at android.app.ActivityThread.main(ActivityThread.java:6524)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
安卓7.0以上版本更新apk报错相关推荐
- android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider
android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider 适配步骤: 1. 创建file_paths.x ...
- Android P使用pm install安装apk报错
Android P使用pm install安装apk报错 avc: denied { read } for scontext=u:r:system_server:s0 tcontext=u:objec ...
- jmeter4.0 执行jmeter_server.bat报错
Jmeter分布式执行 1. ------------------------------- Jmeter4.0 执行jmeter_server.bat 报错,是由于4.0要手工生成密钥 bin ...
- django2.0集成xadmin0.6报错集锦
django2.0集成xadmin0.6报错集锦 1.django2.0把from django.core.urlresolvers修改成了django.urls 报错如下: 1 2 3 File ...
- 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法
安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...
- 安装APK报错解决方法
adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.INSTALL_PARSE_FAILED_INCONSIS ...
- 安装APK报错解决方法【转】
本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...
- Mysql8.0.16 连接包报错解决方法
Mysql8.0.16 连接包报错解决方法 Mysql8.0 .16连接包报错: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized o ...
- mysql8.0 设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql8.0 设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements ...
最新文章
- ubuntu18.04 实现中文化 中文输入法
- 自定义控件的构建(12)
- javascript中对变量类型的推断
- 大神!有人花两年开发了一个新notebook,支持实时协作还更快
- 全连接的多层神经网络结构(MultiLayerNet)
- 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题
- 为什么你拼命学,却一无所成?
- 十一项全球最具权威的大数据资质认证
- java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)
- 20139216网络攻防技术第七次作业
- VTK:图形基本操作进阶——表面重建技术(等值面提取)
- 搜索引擎优化核心关键词策略
- opencv证件照变更任意底色
- 推荐必读:测试人员如何快速熟悉新业务?
- MySQL 数据导入
- docker: Error response from daemon: Unknown runtime specified nvidia. 解决方法
- Response to reviewer 回复审稿人
- vba html网页自动登录,vba实现网页自动登录
- 直播带货表格模板-自动显示图片-自动关联系列商品
- Mysqk 多表连接查询的 “打字练习”
热门文章
- 苹果备忘录怎么调字体大小_苹果手机存在备忘录里的内容怎么发给朋友
- 日记侠:朋友圈内容规划5点建议
- 无线开发基础:频宽、带宽和频带关系
- 记录一次内存使用过高问题分析过程
- Internet TV 影音娱乐新生活
- react基础入门,类组件和函数组件,state,props,refs
- 2022-2028年中国新能源电力运维托管行业市场调查研究及未来趋势预测报告
- memory_target和sga、pga的关系
- Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.02.06测试题
- s805b刷Linux系统,S805盒子安装debian的方法