uni-app中UC浏览器的“保存到UC网盘”功能导致apk安装流程出错

uni-app中UC浏览器的“保存到UC网盘”功能导致apk安装流程出错

信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10专业版
HBuilderX类型 正式
HBuilderX版本号 3.2.9
手机系统 Android
手机系统版本号 Android 9.0
手机厂商 华为
手机机型 荣耀play
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

示例代码:

onLoad(){
uni.downloadFile({
url:'https://hbgd-app.oss-cn-hangzhou.aliyuncs.com/hbgd211025.apk',
success: res => {
console.log(JSON.stringify(res))
if (res.statusCode == 200) {
this.installBtn(res.tempFilePath);
}
}
});
} ,
methods:{
installBtn: function(path) {
plus.runtime.install(path, {
force: false
}, res => {
//更新完重启app
plus.runtime.restart();
},err => {
uni.showModal({
title: '更新失败',
content: err.message,
showCancel: false,
success: res => {}
});
});
}
}

操作步骤:

https://hbgd-app.oss-cn-hangzhou.aliyuncs.com/hbgd2109281.apk 使用华为荣耀play手机通过这个链接下载老的app,打开以后会提示自动更新 自动更新会走代码示例的代码,如果手机上有UC浏览器就会在下载完毕以后提示选择“打包安装程序”打开安装包还是把安装包文件“保存到UC网盘”

预期结果:

下载完毕以后直接开始安装

实际结果:

下载完以后弹窗了选择“打包安装程序”打开安装包还是把安装包文件“保存到UC网盘”

bug描述:

使用uni.downloadFile下载apk,在下载apk完毕以后,使用plus.runtime.install安装apk,会提示选择“打包安装程序”打开安装包还是把安装包文件“保存到UC网盘” 如果不点击“打包安装程序”就会无法安装 如果不小心把打开UC网盘设置为默认选项就会每次下载完了直接往UC浏览器跳转,非常恶心


更多关于uni-app中UC浏览器的“保存到UC网盘”功能导致apk安装流程出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

这明显是UC浏览器注册了系统APK文件的打开方式

更多关于uni-app中UC浏览器的“保存到UC网盘”功能导致apk安装流程出错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


那么解决方式是什么,建议跳转到默认浏览器下载安装包吗

回复 5***@qq.com: 要么卸载流氓UC 要么选打包 然后选始终

这个问题是由于UC浏览器的文件关联机制导致的。当下载APK文件后,系统会弹出应用选择器,而UC浏览器注册了处理APK文件的Intent Filter,导致出现“保存到UC网盘”的选项。

解决方案:

  1. 使用原生插件:通过uni.requireNativePlugin调用原生模块来安装APK,避免系统默认的文件打开选择器。

  2. 修改文件路径:将下载的APK文件移动到应用私有目录,再调用安装。UC浏览器通常无法关联到应用私有目录的文件。

installBtn: function(path) {
    // 将文件移动到应用私有目录
    plus.io.resolveLocalFileSystemURL(path, (entry) => {
        entry.copyTo(plus.io.PRIVATE_WWW, 'update.apk', (newEntry) => {
            plus.runtime.install(newEntry.fullPath, {
                force: false
            }, res => {
                plus.runtime.restart();
            }, err => {
                uni.showModal({
                    title: '更新失败',
                    content: err.message,
                    showCancel: false
                });
            });
        });
    });
}
回到顶部