Android8.0版本升级需注意的坑

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013408979/article/details/80818006

1、自Android6.0,Android7.0出来后apk升级安装就不能用以前的需要多申请权限,FileProvider(这就不多说了),Android8.0的出来,下载apk后不会跳转安装页面,是因为Android8.0多了未知来源权限,需要跳转手动打开申请未知来源权限或这设置列表—>安全与隐私—>更多安全设置—>安装未知应用
2、需要在清单文件添加权限, <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />,切记一定要申请,不然跳转到权限列表,找不到当前的软件
3、项目targetSdkVersion一定要是26,不然boolean b = getPackageManager().canRequestPackageInstalls(); 返回的一直是false
4、下面是具体代码,先判断当前版本是否是26,如果是26的话,判断未知来源权限是否有,如果没有去申请,用户自己跳转当前软件的未知来源权限申请页面,赋予权限后然后在判断当前权限是否拥有,有该权限后就行安装即可

public void checkIsAndroidO() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            boolean b = getPackageManager().canRequestPackageInstalls();
            if (b) {
                updateApk(); //安装apk
            } else {
                //请求安装未知应用来源的权限
                DialogUtils.showCustomDialog(this,"提示", "升级新版本安装应用需要打开未知来源权限,请去设置中开启权限", "是", "", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 10010);
                    }
                }, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                }, false);
            }
        } else {
            updateApk(); //安装apk
        }
    }

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 10010:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    updateApk();
                } else {
                    Uri packageURI = Uri.parse("package:"+getPackageName());//设置包名,可直接跳转当前软件的设置页面
                    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
                    startActivityForResult(intent, 10012);
                }
                break;
        }
    }

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 10012:
               checkIsAndroidO();
                break;

        }
    }
展开阅读全文

没有更多推荐了,返回首页