安卓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());
    原文作者:MarkRao尋道
    原文地址: https://www.jianshu.com/p/3f687727b194
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞