问题出现
App版本更新时,使用Android 8.0的手机会出现问题:安装包下载完成之后,屏幕闪了一下并没有跳转到安装界面,使用8.0以下的手机并没有这个问题,查看异常信息,发现如下警告

java.lang.SecurityException: Package com.example.xx.allrun is currently frozen!

原因分析
Android 8.0 Oreo 中,Google 移除掉了容易被滥用的“允许位置来源”应用的开关,在安装 Play Store 之外的第三方来源的 Android 应用的时候,竟然没有了“允许未知来源”的检查框,如果你还是想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”的许可

解决方法
1、为了适配8.0需要增加以下权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

在应用下载完成进入安装界面之前会弹出如下对话框:

点击外部来源


打开允许开关,点击返回键自会进入安装界面(安装流程略)

2、接下来我们写点代码更好的处理一下这一新变更

 /*** 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装*/public static void checkAndroidOAndInstall(Context context, String filePath) {if (Build.VERSION.SDK_INT >= 26) {//判断是否可以安装未知来源的应用boolean b = context.getPackageManager().canRequestPackageInstalls();if (b) {installApkFile(context,filePath);} else {//先调用一下方法,否则不弹出权限提示框installApkFile(context,filePath);//请求安装未知应用来源的权限ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, MeFragment.INSTALL_PACKAGES_REQUESTCODE);}} else {installApkFile(context,filePath);}}

对代码的解释:
安装时,判断是否是8.0,如果不是,直接安装
如果是,则判断有没有可以安装未知应用来源权限,有则直接安装
没有,则请求权限
第一次安装时,因为系统默认并没有允许该权限,所以我们请求该权限,在权限请求结果的回调中处理逻辑如下:
写在Activity中

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case INSTALL_PACKAGES_REQUESTCODE:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {installApkFile(getActivity(),apkSavePath);} else {Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);}break;}}

如果有权限,则直接安装
如果没有获得该权限,我们可以使用Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES intent 操作将用户引导至安装未知应用界面

用户点击我们的App item 则进入我们之前见到的那个开关页面

用户允许该来源之后,我们的处理如下:

 @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case GET_UNKNOWN_APP_SOURCES:Tools.checkAndroidOAndInstall(getActivity(),apkSavePath);break;default:break;}}

如果用户允许了安装该来源的应用,则自会进入安装界面


关于安装的代码怎么写,可以参考
?酷跑项目:更新后安装apk


感谢github_2011
Android 8.0安装apk

Android8.0安装apk报错:Package xxx is currently frozen相关推荐

  1. android.os.FileUriExposedException 自动安装APK报错 5分钟搞定Android 7.0+ FileProvider

    android.os.FileUriExposedException 自动安装APK报错  5分钟搞定Android 7.0+ FileProvider 适配步骤: 1. 创建file_paths.x ...

  2. CentOS 8.0 安装docker 报错:Problem package docker-ce-3 19.03.4-3.el7.x86_64 require

    文章目录 CentOS 8.0 安装docker 报错:Problem: package docker-ce-3:19.03.4-3.el7.x86_64 requires containerd.io ...

  3. Android P使用pm install安装apk报错

    Android P使用pm install安装apk报错 avc: denied { read } for scontext=u:r:system_server:s0 tcontext=u:objec ...

  4. 安装APK报错解决方法

    adb install xxx.apk 报错,安装APK报错:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE.INSTALL_PARSE_FAILED_INCONSIS ...

  5. 安装APK报错解决方法【转】

    本文转载自:http://blog.csdn.net/zy1235678/article/details/38122827 adb install xxx.apk 报错,安装APK报错:INSTALL ...

  6. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

    安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...

  7. adb 安装apk报错Failure [INSTALL_FAILED_TEST_ONLY:]

    同样的debug apk在as上安装没任何问题,但是用adb命令安装却报错:INSTALL_FAILED_TEST_ONLY 原因:as安装apk时会给清单文件的application节点里加上tes ...

  8. golang 引入包报错package xxx is not in GOROOT

    记录最近自学 golang 遇到的坑: $GOROOT = /opt/go $GOPATH = /root/goproject 问题: 当引入gopath目录下的包, 报错: package go_c ...

  9. Android安装APK报错INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install XXX without first uninstalling

    1. 情景描述 今天在使用pm install 指令安装APK时报如下错误: console:/ # pm install storage/6CEC-41FF/Endpoint.apk avc: de ...

最新文章

  1. linux resource
  2. 聚类分析基础知识总结及实战解析
  3. ASP.NET页面通过URL传递参数(一)(转载)
  4. Linux显示5 9行的数据,Linux复习
  5. pytorch学习笔记(八):softmax回归的从零开始实现
  6. IDEA 不愧为神器,结合 Groovy 脚本,简直无敌!
  7. 分析“关于Linux内核引入的accept_local参数的一个问题”
  8. mysql管理工具_15款最佳的MySQL管理工具和应用程序
  9. 《细说PHP》读书笔记
  10. 器件选型基本总则及选型标准
  11. Word论文用的各级标题大小
  12. vue实现简单搜索功能
  13. 【JAVA】关于自动化测试所需要学习的java基础知识笔记
  14. java中返回两个参数问题
  15. 垃圾回收之三色标记法
  16. 穿戴式设备应该新机遇--可以测心率的光感小米手环
  17. win10 安装 ad9
  18. 胆囊炎的临床症状有哪些?
  19. 数仓工具—Hive源码之Beeline/HiveCli(4)
  20. 2018远景能源笔试

热门文章

  1. 巴菲特08年致股东信
  2. DNS智能解析的搭建与配置
  3. 2021最新编程语言排行榜
  4. EZ娱乐带手机版(足球+彩票)
  5. 以题促学02_matplotlib画图_墨尔本1981年至1990年的每月温度情况折线图
  6. Microsoft Graph Toolkit Teams 相关
  7. pspice忆阻器代码解释
  8. python网络安全的书下载_Kindle电子书 网络安全技术 – 计算机网络安全技术 PDF...
  9. python如何识别特殊字符_python正则表达式--特殊字符
  10. Palm OS开发常见问题和技巧