由于项目需求,项目组的老代码需要推翻重写,现以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报错相关推荐

  1. android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider

    android.os.FileUriExposedException 自动安装APK报错  5分钟搞定Android 7.0+ FileProvider 适配步骤: 1. 创建file_paths.x ...

  2. Android P使用pm install安装apk报错

    Android P使用pm install安装apk报错 avc: denied { read } for scontext=u:r:system_server:s0 tcontext=u:objec ...

  3. jmeter4.0 执行jmeter_server.bat报错

    Jmeter分布式执行 1. ------------------------------- Jmeter4.0  执行jmeter_server.bat   报错,是由于4.0要手工生成密钥 bin ...

  4. django2.0集成xadmin0.6报错集锦

    django2.0集成xadmin0.6报错集锦 1.django2.0把from django.core.urlresolvers修改成了django.urls 报错如下: 1 2 3   File ...

  5. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

    安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...

  6. 安装APK报错解决方法

    adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.INSTALL_PARSE_FAILED_INCONSIS ...

  7. 安装APK报错解决方法【转】

    本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...

  8. Mysql8.0.16 连接包报错解决方法

    Mysql8.0.16 连接包报错解决方法 Mysql8.0 .16连接包报错: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized o ...

  9. 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 ...

最新文章

  1. ubuntu18.04 实现中文化 中文输入法
  2. 自定义控件的构建(12)
  3. javascript中对变量类型的推断
  4. 大神!有人花两年开发了一个新notebook,支持实时协作还更快
  5. 全连接的多层神经网络结构(MultiLayerNet)
  6. 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题
  7. 为什么你拼命学,却一无所成?
  8. 十一项全球最具权威的大数据资质认证
  9. java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)
  10. 20139216网络攻防技术第七次作业
  11. VTK:图形基本操作进阶——表面重建技术(等值面提取)
  12. 搜索引擎优化核心关键词策略
  13. opencv证件照变更任意底色
  14. 推荐必读:测试人员如何快速熟悉新业务?
  15. MySQL 数据导入
  16. docker: Error response from daemon: Unknown runtime specified nvidia. 解决方法
  17. Response to reviewer 回复审稿人
  18. vba html网页自动登录,vba实现网页自动登录
  19. 直播带货表格模板-自动显示图片-自动关联系列商品
  20. Mysqk 多表连接查询的 “打字练习”

热门文章

  1. 苹果备忘录怎么调字体大小_苹果手机存在备忘录里的内容怎么发给朋友
  2. 日记侠:朋友圈内容规划5点建议
  3. 无线开发基础:频宽、带宽和频带关系
  4. 记录一次内存使用过高问题分析过程
  5. Internet TV 影音娱乐新生活
  6. react基础入门,类组件和函数组件,state,props,refs
  7. 2022-2028年中国新能源电力运维托管行业市场调查研究及未来趋势预测报告
  8. memory_target和sga、pga的关系
  9. Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.02.06测试题
  10. s805b刷Linux系统,S805盒子安装debian的方法