cordova手动更新

1:依赖

cordova-plugin-file

 

cordova-plugin-file-transfer

cordova-plugin-file-opener2

 

 第二个参数:application/vnd.android.package-archive来源

cordova plugin add cordova-plugin-app-version//获取cordova版本号
cordova plugin add cordova-plugin-file//获取程序相关目录
cordova plugin add cordova-plugin-file-transfer//操作文件上传/下载
cordova plugin add cordova-plugin-file-opener2//打开本地文件

2:代码实现

思路实现:

1:首先使用cordova.getAppVersion.getVersionNumber()这个方法获取到cordova版本号

2:请求接口获取到最新的版本号信息(也可以请求txt等文件,只要能获取到版本就可以了)

3:对比版本号差异,如果版本一致则不变

4:获取到apk下载地址

5:获取到cordova对象,赋值好:apk下载地址,apk打开地址(直接启动apk而不需要用户操作)

6:实列化FileTransfer  (操作文件上传/下载)

7:使用FileTransfer  的download方法开始下载文件

8:使用FileTransfer  的onprogress方法监听下载进度(下载完成会自动打开,这里是为了告诉用户下载进度)

9:cordova.plugins.fileOpener2.open打开下载地址

/**选中项的信息 */
let system: any = localStorage.getItem("system");
function onDeviceReady() {cordova.getAppVersion.getVersionNumber().then(function (version: any) {console.log(version, "当前版本");versIon.value = version;system = JSON.parse(system);/*** 从服务器获取应用的版本信息,和本地应用版本对比*/let uel = system.address + "xxx";axios.post(uel,{orgid: system.organization,mactype: "evaluator",systemname: store.systemname,},{headers: {Authorization: system.token,},}).then((res: any) => {console.log(res.data);if (res.data.code === 200) {if (res.data.data.version > version) {// 更新versions.value.filesPath = `apk下载地址`;}}}).catch((err: any) => {console.log(err, "版本接口请求失败");});// 监听网络状况,无网络时document.addEventListener("offline",function () {console.log("网络异常,不能连接到服务器!");},false);});
}
/** 检测新版本升级*/
function upgradeForAndroid(ApkUrl: any) {schedule.value = "0";//从window中获取Cordova对象var cordova = window.cordova;var url = system.address + ApkUrl;//apk下载地址var saveUrl = cordova.file.externalDataDirectory + "/app-debug.apk"; //要下载的目标路径及文件名(本地存储路径)var fileTransfer = new FileTransfer();// 开始下载并打开fileTransfer.download(url,saveUrl,function (entry: any) {console.log("download complete: " + entry.toURL());let url = entry.toURL();cordova.plugins.fileOpener2.open(url,"application/vnd.android.package-archive",{error: function (e: any) {console.log("open fail", e);},success: function (e: any) {console.log("open successfully", e);},});},function (error: any) {console.log("download error source " + error.source);console.log("download error target " + error.target);console.log("download error code" + error.code);});// 监听下载获取进度条fileTransfer.onprogress = function (progressEvent: any) {console.log(progressEvent, "下载进度");if (progressEvent.lengthComputable) {var downloadProgress =(progressEvent.loaded / progressEvent.total) * 100;schedule.value = Math.floor(downloadProgress) + "";console.log(schedule.value, "已经下载");if (Math.floor(downloadProgress) == 100) {schedule.value = "-1";centerDialogVisible.value = false;} else {console.log("下载完成后会自动弹出安装");}}};
}

3:执行顺序

1:监听 deviceready 事件执行完毕   (这个事件是cordova专属的监听跟android交互加载的)

document.addEventListener("deviceready", onDeviceReady, false);

2:执行onDeviceReady事件对比版本

3:弹窗提示用户是否更新

4:点击更新按钮执行 upgradeForAndroid 事件

参考文章:看了很多文章但是没有很好的实现最后参考这个文章加上项目需求实现了

https://juejin.cn/post/6844904138388537351?from=search-suggest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第375题猜数字大小II

题目: 题解: class Solution:def getMoneyAmount(self, n: int) -> int:f [[0] * (n 1) for _ in range(n 1)]for i in range(n - 1, 0, -1):for j in range(i 1, n 1):f[i][j] j f[i][j - 1]for k in range (i, j):f[i][j] min(f[i][j], k …

视频中间件:大华视频设备接入管理应用

前言 上篇博文介绍了视频中间件:海康视频设备的接入管理?,今天给大家带来大华视频设备的接入管理,视频中间件平台支持大华Sdk、大华主动注册、Onvif、Rtsp、Gb28181等方式对大华视频设备的接入管理。同时视频中间件可支持协议互转…

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎(Unreal Engine)火了黑神话游戏。 往后,会有大批量的公司开始模仿这个赛道! C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎,如虚幻引擎(Unreal Engine)等。以下是对 C 虚拟引…

数据库应用

一、数据库基本概念 1、数据 (1)描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 (2)数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱…

AI学习记录 - 怎么理解 torch 的 nn.Conv2d

有用就点个赞 怎么理解 nn.Conv2d 参数 conv_layer nn.Conv2d(in_channels3, out_channels 64, kernel_size3, stride1, padding0, biasFalse) in_channels in_channels 可以设置成1,2,3,4等等都可以,一般来说做图像识别的时…

SD-WAN组网部署需要多久?

企业在发展时,对能够快速响应需求、降低成本、提升网络性能与安全性的解决方案的需求日益迫切。SD-WAN作为一种创新的网络技术,正逐渐成为企业实现这一目标的关键工具。许多企业关心的问题是:部署SD-WAN需要多长时间?接下来我们将…

舍得酒业增长梦魇浮现:上半年业绩下挫,库存激增仍要扩产

撰稿|行星 来源|贝多财经 2024年,白酒行业仍处于“存量竞争”下的调整恢复期。而据中国酒业协会理事长宋书玉透露,今年上半年全国白酒产量、销售收入、利润分别同比增长3%、11%和15%,实现量、价、利齐升,展现出强大的韧性。 在市…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

CSS文本样式(一)

一、font-family 1、font-family属性 font-family​ :属性指定元素的​字体​,语法格式如下: ​font-family​: 字体1,字体2,...; 有两种字体系列名称: ​字体系列​:特定的字体系列(如Times New Rom…

深度学习-批量与动量【Datawhale X 李宏毅苹果书 AI夏令营】

实际工程中使用批量和动量可以对抗鞍点或局部最小值。 批量: 在计算梯度的时候不会用所有数据计算损失。类比我们考试复习时,一个单元一个单元的知识点输入,所有单元都输入就是一整个轮回。而这一个单元用深度学习的术语来说就是批量&#x…

SpringBoot实现Word转PDF/TXT

背景 研发工作中难免会遇到一些奇奇怪怪的需求,就比如最近,客户提了个新需求:上传一个WORD文档,要求通过系统把该文档转换成PDF和TXT。客户的需求是没得商量的,必须实现!承载着客户的期望,我开始…

postgresql底层Driver驱动包数据库是怎么连接,怎么发送数据,怎么设置超时

##一、建立连接 ##connectionFactory.openConnectionImpl ##底层也没什么神秘的,就是使用的socket通讯 ##连接,打开流 ##socket.connect ##获取到读写流 ##二、数据库连接池创建Connection连接 ##三、发送相关sql数据 ##发数据 ##发送查询 ##sendParse(q…

three.js渲染中文的3D字体

下载中文字体 引入下面的代码 点击下载 提取码: lywa <!DOCTYPE html> <html lang"en"><head><title>three.js webgl - modifier - tessellation</title><meta charset"utf-8"><meta name"viewport" c…

第二证券:A股公司中期分红踊跃 红利资产获机构关注

A股公司2024年半年报正在密布宣布&#xff0c;上市公司中期分红计划备受商场重视。据统计&#xff0c;到8月26日&#xff0c;有中期分红计划的A股公司近370家&#xff0c;创下前史新高。业内人士称&#xff0c;得益于政策层面的生动引导&#xff0c;上市公司分红“大军”敏捷扩…

网络基础:理解 IP 地址与网段(网段是什么,网段与IP地址)

前言 在计算机网络中&#xff0c;网段 和 IP地址是网络通信中的两个至关重要的概念&#xff0c;但它们并不相同。这里来介绍一下它们之间的关系&#xff0c;简单记录一下 一. 网段 网段是指一个 IP 地址范围&#xff0c;通常由一个 IP 地址和一个子网掩码共同定义。子网掩码用…

赛博朋克游戏 各种游戏定制开发 软件定制开发 游戏开发 区块链游戏开发

赛博朋克&#xff0c;是“控制论”与“朋克”的合成词。字面意思&#xff0c;就是对“机械文明”的反思。该背景大多描绘在未来&#xff0c;建立于“低端生活与未来科技结合”的基础上&#xff0c;拥有先进科学技术&#xff0c;再以一定程度崩坏的社会结构做对比。之后&#xf…

在Ubuntu系统中安装R语言并使用R Markdown

官方提供的R语言安装教程&#xff1a;全面的 R 存档网络 (tsinghua.edu.cn) 在安装之前先使用命令更新软件列表&#xff0c;命令中的 - qq 参数用于减少命令执行时的输出信息。 # update indices sudo apt update -qq 安装依赖项&#xff1a;dirmngr&#xff08;用于管理密钥…

mysql的聚簇索引、非聚簇索引、回表

1.聚簇索引和非聚簇索引 聚簇索引&#xff08;聚集索引&#xff09;&#xff1a;数据和索引放在一起&#xff0c;B树的叶子节点存放了整行数据&#xff0c;有且只有一个。 【主键索引和唯一索引&#xff0c;主键唯一&#xff0c;存放的是主键对应的整行数据】非聚簇索引&#…

阿里云服务器部署Sonic总结

1.购买阿里云服务器 访问阿里云官网&#xff0c;选择合适的云服务器购买 购买成功后创建ECS云服务器 下载Alibaba Cloud Client 创建AccessKey并保存 打开Alibaba Cloud Client&#xff0c;添加账号 2.安装docker 选择操作—>启动远程连接(SSH) snap install docker doc…

PostgreSQL 与对象存储的结合: 在 MinIO 中访问外部数据

数据领域最激动人心的发展之一是湖仓一体功能在所有主要数据库供应商中的兴起。Snowflake 和 SQL Server 长期以来一直采用这一点&#xff0c;现在 PostgreSQL 正在通过 pg_lakehouse 拥抱这种范式转变&#xff0c;使得利用现代数据湖进行分析、AI 等比以往任何时候都更容易。随…