app-update.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. export function downloadApkWithJsonPost(apiUrl, requestData) {
  2. // 下载文件的本地存储路径
  3. const downloadPath = "_doc/update/";
  4. const apkFileName = "app.apk";
  5. const apkFilePath = downloadPath + apkFileName;
  6. // 显示下载进度
  7. let downloadTask;
  8. const progressTip = plus.nativeUI.showWaiting("准备下载更新...");
  9. try {
  10. // 确保下载目录存在
  11. plus.io.resolveLocalFileSystemURL(
  12. "_doc/",
  13. function (entry) {
  14. entry.getDirectory(
  15. "update",
  16. { create: true },
  17. function (dirEntry) {
  18. startDownload();
  19. },
  20. function (err) {
  21. handleError("创建下载目录失败:" + JSON.stringify(err));
  22. }
  23. );
  24. },
  25. function (err) {
  26. handleError("访问存储失败:" + JSON.stringify(err));
  27. }
  28. );
  29. } catch (e) {
  30. handleError("初始化下载失败:" + e.message);
  31. }
  32. function startDownload() {
  33. // 创建下载任务
  34. downloadTask = plus.downloader.createDownload(
  35. apiUrl,
  36. {
  37. method: "POST",
  38. data: JSON.stringify(requestData),
  39. filename: apkFilePath,
  40. },
  41. function (download, status) {
  42. progressTip.close();
  43. // 下载完成
  44. if (status === 200) {
  45. console.log("下载成功: " + download.filename);
  46. installApk(download.filename);
  47. } else {
  48. handleError("下载失败,状态码: " + status);
  49. }
  50. }
  51. );
  52. // 设置POST请求头
  53. downloadTask.setRequestHeader("Content-Type", "application/json");
  54. // 监听下载进度
  55. downloadTask.addEventListener("statechanged", function (task, status) {
  56. switch (task.state) {
  57. case 1: // 开始
  58. progressTip.setTitle("开始下载...");
  59. break;
  60. case 2: // 已连接到服务器
  61. progressTip.setTitle("已连接到服务器...");
  62. break;
  63. case 3: // 接收数据
  64. const progress = parseInt(
  65. (task.downloadedSize / task.totalSize) * 100
  66. );
  67. progressTip.setTitle(`正在下载更新包(${progress}%)...`);
  68. break;
  69. case 4: // 下载完成
  70. progressTip.setTitle("下载完成,准备安装...");
  71. break;
  72. }
  73. });
  74. // 启动下载
  75. downloadTask.start();
  76. }
  77. function handleError(message) {
  78. if (progressTip) {
  79. progressTip.close();
  80. }
  81. if (downloadTask && downloadTask.state < 4) {
  82. downloadTask.abort();
  83. }
  84. console.error("下载错误:", message);
  85. plus.nativeUI.alert(message);
  86. }
  87. }
  88. function installApk(filepath) {
  89. plus.runtime.install(
  90. filepath,
  91. {
  92. force: true,
  93. },
  94. function () {
  95. plus.nativeUI.alert("更新完成,应用即将重启", function () {
  96. plus.runtime.restart();
  97. });
  98. },
  99. function (e) {
  100. plus.nativeUI.alert("安装失败:" + JSON.stringify(e));
  101. }
  102. );
  103. }