android8.0 安装apk没反应问题。

在Android 8.0系统中,由于未知来源应用权限管理的改变,安装未知来源的APK时不再提供全局开关,而是需要针对每个应用单独授权。这导致直接安装应用可能会被阻止,需要在应用内部处理未知来源安装权限。解决方法包括在AndroidManifest.xml中添加安装权限,并在安装前检查和处理权限回调。

原因:Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限。

以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装。

Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。 
当你的应用直接适配到Android8之后,内部启动应用安装是会被阻塞的,如果不处理好这个未知来源的权限,会导致应用根本无法更新,只能去应用市场重新下载。 (网上找的)

解决方法:

先加个权限:

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

注意这个不是运行时权限,不能代码申请啊。

然后安装前检查一下

//安装前检测权限,安装android8.0 需要权限
public static void installBefore() {
    boolean haveInstallPermission;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        //先获取是否有安装未知来源应用的权限
        haveInstallPermission = BGIApplication.getInstance().getCurrentActivity().getPackageManager().canRequestPackageInstalls();
        if (!haveInstallPermission) {//没有权限
            new AlertDialog.Builder(BGIApplication.getInstance().getCurrentActivity())
                    .setTitle("提示")
                    .setMessage("安装应用需要打开未知来源权限,请去设置中开启权限")
                    .setNegativeButton("退出", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                            ToastUtil.toastShort("没有安装权限,安装失败。");
                            System.exit(0);
                        }
                    })
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                Uri packageURI = Uri.parse("package:" + BGIApplication.getInstance().getCurrentActivity().getPackageName());
                                //注意这个是8.0新API
                                Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
                                BGIApplication.getInstance().getCurrentActivity().startActivityForResult(intent,CODE_UPDATE);
                                dialog.cancel();
                            }
                        }
                    })
                    .show()
                    .setCanceledOnTouchOutside(false);
            return;
        }
    }
    //有权限,开始安装应用程序
    install();
}

权限申请完之后在 onActivityResult 里面判断下就好,resultCode == RESULT_OK那就是给权限了,直接安装吧。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值