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

本文介绍从Android 6.0开始至Android 8.0及后续版本中,针对APK升级安装所需的权限调整,特别是针对未知来源应用安装的处理方式。文章详细解释了如何检查和申请必要的权限,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值