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
这明显是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网盘”的选项。
解决方案:
-
使用原生插件:通过
uni.requireNativePlugin调用原生模块来安装APK,避免系统默认的文件打开选择器。 -
修改文件路径:将下载的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
});
});
});
});
}

