适配Android8.0无法弹出覆盖安装界面

记录一下做版本更新时候无法弹出覆盖安装界面,测试用Android8.0以下的系统是可以覆盖安装成功的,所以证明6.0的动态权限和7.0的文件读取权限是没问题的,后来google一下,发现8.0添加了新的安全措施,不允许应用内安装未经过Google play验证的应用,所以我们又得针对8.0系统做适配。

  • 在清单文件中添加如下权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> 
  • 判断是否已经获取到允许安装未知应用
    在8.0中的PackageManager类中多了 canRequestPackageInstalls() 这个方法来检查是否已经获取到允许安装未知应用,所以我们在代码中只需要通过调用packageManager.canRequestPackageInstalls()返回的boolean值来判断是否能进行下一步安装,伪代码如下:
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            boolean canInstall = getPackageManager().canRequestPackageInstalls();
            if (canInstall) {
               installApk();
            } else {
                //请求安装未知应用来源的权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 0);
            }
        } else {
            installApk();
        }
  • 引导用户跳转到 安装未知应用 界面
    如果用户是首次更新,则canRequestPackageInstalls()默认返回false,所以我们要引导用户跳转到 安装未知应用 界面
startActivity(Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES))

进过如上步骤,那么版本更新就可以在8.0系统上完美的运行了,比较少写文章,表述可能不太好,如有疑问可私聊。喜欢的点个赞。

    原文作者:haegyeong
    原文地址: https://www.jianshu.com/p/c48e391d3054
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞