安卓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());
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容