专栏首页指尖下的Android安卓7.0在线更新解析包时出现问题

安卓7.0在线更新解析包时出现问题

关于7.0行为变更,FileProvider应用共享文件的问题可以看鸿洋大佬的这篇博客 https://blog.csdn.net/lmj623565791/article/details/72859156 但是我遇到的这个问题是明明有授权临时权限,FileProvider的XML也有写,但是在下载apk后解析安装包出错,后面回顾一圈代码发现,有问题。

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                    intent.setDataAndType(Uri.fromFile(response), "application/vnd.android.package-archive");
                } else {//Android7.0之后获取uri要用contentProvider
                    intent.setDataAndType(Uri.parse("file://" + response.toString()), "application/vnd.android.package-archive");
                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                }
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                //开始安装
                startActivity(intent);
                //关闭旧版本的应用程序的进程
                android.os.Process.killProcess(android.os.Process.myPid());

intent.setFlags()会覆盖掉intent.addFlags(),而intent.addFlags只会在之前的后面添加,所以每次权限是给了,但是被去除了。调整下代码的位置,问题解决

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                    intent.setDataAndType(Uri.fromFile(response), "application/vnd.android.package-archive");
                } else {//Android7.0之后获取uri要用contentProvider
                    intent.setDataAndType(Uri.parse("file://" + response.toString()), "application/vnd.android.package-archive");
                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                }
                //开始安装
                startActivity(intent);
                //关闭旧版本的应用程序的进程
                android.os.Process.killProcess(android.os.Process.myPid());

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安卓跨进程通信之Aidl教程详解(一)

    进程通信肯定有传输数据和接受并返还数据,先新建两个项目,一个为AidlDemo1作为Service,另一个为AidlDemo2作为Client

    萬物並作吾以觀復
  • Java中 private、protected、public 和 default 的区别

    具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。

    萬物並作吾以觀復
  • Android面向切面AOP架构设计简析

    按照惯例,谈一个框架时我们先说明一下这东西到底是啥、干什么的,首先AOP面向切面和我们通常意义上写的代码不太一样,Java是OOP面向对象,所有的代码都是符合某...

    萬物並作吾以觀復
  • Android  隐式Intent的实例详解

    顾名思义,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,举个例子,比如有5个人:

    砸漏
  • Android插件化——Activity的启动

    Oceanlong
  • 手撸Router——解决跨模块下的页面跳转

    正是由于将项目模块化拆分,各模块之间没有任何依赖关系,也互相不可见,那么从A模块的a界面跳转到B模块的b界面该怎么办呢?

    蜻蜓队长
  • android service原理及免杀(3)

    系统重新创建服务并且调用onStartCommand()方法,但并不会传递最后一次传递的intent,只是传递一个空的intent。除非存在将要传递来的inte...

    随心助手
  • 重识Activity——生命周期详解

    1. 单个Activity生命周期 *  显示状态——onCreate()、onStart()、onResume() * 隐藏状态——onPause():部...

    城市中的游牧民族
  • ACTION_SEND

    佛系编码
  • 酷炫的外部开启Activity新姿势

    在H5页面疯狂的今天,H5和Native的交互就至关重要,而且交互的方式有很多,google提供了一个公共的方式:js与native互调,即js可以调用Nati...

    先知先觉

扫码关注云+社区

领取腾讯云代金券