美文网首页Android技术知识Android资深之路Android开发
安卓7.0在线更新解析包时出现问题

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

作者: markRao | 来源:发表于2018-11-14 15:51 被阅读27次

    关于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());
    

    相关文章

      网友评论

      • VinPin:你把最后一行代码注释掉,不要杀死进程,部分手机也会因此报解析包错误。

      本文标题:安卓7.0在线更新解析包时出现问题

      本文链接:https://www.haomeiwen.com/subject/wjjjfqtx.html