关于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());
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句