Android 8.0系统关于手动打开安装应用权限问题

在Android 8.0以上系统的手机上,会发现有部份手机,app下载完毕之后但是安装不上,也就是下载完毕之后,闪退。这个问题在8.0系统的手机上不是必现的,这可能和手机厂商的系统处理有关,但是有一点是确定的:Google从Android8.0系统开始,关闭了未知应用安装权限,需要用户手动点开。

第一步:当APK下载完毕之后,正常来说要跳转到APK安装页面,但是8.0系统需要做一个判断:是否用户开启了应用安装权限。

       // 兼容Android 8.0
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //先获取是否有安装未知来源应用的权限
            boolean haveInstallPermission = context.getPackageManager().canRequestPackageInstalls();
            if (!haveInstallPermission) {//没有权限
                //TODO  去开启权限
            } else {
                //TODO 安装APK
            }
        } else {
            //TODO 安装APK
        }

第二步:如果没有就跳转到安装权限列表,然后从列表中找到我们的项目APP,跳转到我们的APP的设置安装权限页面:

    @RequiresApi(api = Build.VERSION_CODES.O)
    private void startInstallPermissionSettingActivity() {
        Uri packageURI = Uri.parse("package:" + getPackageName());
        //注意这个是8.0新API
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
        startActivityForResult(intent, UNKNOW_APP_SOURCE_CODE);
    }

需要注意的是上面的getPackgeName() 这个一定要加。应为这句话就是表明直接跳转到我们APP的设置安装权限页面(不加的话,是跳转到APP设置权限列表页面)。
UNKNOW_APP_SOURCE_CODE,这个变量就是开发者自己定义的了。

第三步:在onActivityResult方法中,接受到是否获取权限成功,如果成功就跳转到直接安装APK。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == UNKNOW_APP_SOURCE_CODE && resultCode == RESULT_OK) {
            //TODO 安装APK
        }
    }

猜你喜欢

转载自blog.csdn.net/lmq121210/article/details/80872143