android 8.0应用内安装包,Android 8.0 下载安装进入【安装未知应用】页面,两步简化一步...

小菜昨天接到客户反馈的问题,说华为手机升级到 Android 8.0 系统以后,程序升级下载之后不能安装;找一个手机测试果然如此,每次下载完之后不跳转安装页面,重新进入程序又继续下载,之后依旧不跳转安装页面,再次进入循环...流程自然欠妥,但发现问题主要还是 Android8.0 权限管理的问题。

在 Android 8.0 系统中,未知来源应用不可直接安装,跳转到的是未知来源应用管理列表,如果需要安装,则需要手动授权"安装未知应用"。

网上大神们解决方案很多,基本一致,但小菜尝试发现每次安装跳转到【安装未知应用列表】页面,之后找到相应的应用,进入【安装未知应用】页面,再手动允许安装应用,小菜想弹框提醒一步允许安装,尝试如下:权限添加,在 AndroidManifest.xml 清单文件中,添加如下权限;在【打开安装包】的代码中添加兼容 Android 8.0 的代码判断;private void notifyToInstall() {    if (!StringUtils.isBlank(apkPath)) {

Intent intent = new Intent(Intent.ACTION_VIEW);        // 由于没有在Activity环境下启动Activity,设置下面的标签

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        if (Build.VERSION.SDK_INT >= 24) { //判读版本是否在7.0以上

//参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致  参数3  共享的文件

Uri apkUri =

FileProvider.getUriForFile(context, "com.founder.newaircloud.fileprovider", new File(apkPath));            //添加这一句表示对目标应用临时授权该Uri所代表的文件

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.setDataAndType(apkUri, "application/vnd.android.package-archive");            //兼容8.0

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {                boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();                if (!hasInstallPermission) {

Intent intent2 = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);

intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

activity.startActivityForResult(intent2, 100);                    return;

}

}

} else {

intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");

}

activity.startActivity(intent);

}

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

安装未知应用列表页面

AAffA0nNPuCLAAAAAElFTkSuQmCC

安装未知应用页面在回调过程中添加一个状态,activity.startActivityForResult(intent2, 100); apkUrl 为下载到本地手机的 apk 路径,接收之后直接安装 apk;@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 100) {        if (!StringUtils.isBlank(mCache.getAsString("apkUrl"))) {

installApk(mCache.getAsString("apkUrl"));

}

}

}//安装应用private void installApk(String apkUrl) {

Intent intent = new Intent(Intent.ACTION_VIEW);    if (Build.VERSION.SDK_INT 

intent.setDataAndType(Uri.fromFile(new File(apkUrl)),                "applicationnd.android.package-archive");

} else {//Android7.0之后获取uri要用contentProvider

Uri apkUri =

FileProvider.getUriForFile(context, "com.founder.chenbaoxinjiang.fileprovider", new File(apkUrl));        //添加这一句表示对目标应用临时授权该Uri所代表的文件

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.setDataAndType(apkUri, "applicationnd.android.package-archive");

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

}

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

getBaseContext().startActivity(intent);

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

合并为一步,允许安装

作者:老菜和尚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值