upgrade.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * @description H5+下载App
  3. * @param downloadUrl:App下载链接
  4. * @param progressCallBack:下载进度回调
  5. */
  6. export const downloadApp = (downloadUrl, progressCallBack = () => { },) => {
  7. return new Promise((resolve, reject) => {
  8. //创建下载任务
  9. const downloadTask = plus.downloader.createDownload(downloadUrl, {
  10. method: "GET"
  11. }, (task, status) => {
  12. console.log(status, 'status')
  13. if (status == 200) { //下载成功
  14. resolve(task.filename)
  15. } else {
  16. reject('fail')
  17. uni.showToast({
  18. title: '下载失败',
  19. duration: 1500,
  20. icon: "none"
  21. });
  22. }
  23. })
  24. //监听下载过程
  25. downloadTask.addEventListener("statechanged", (task, status) => {
  26. switch (task.state) {
  27. case 1: // 开始
  28. break;
  29. case 2: //已连接到服务器
  30. break;
  31. case 3: // 已接收到数据
  32. let hasProgress = task.totalSize && task.totalSize > 0 //是否能获取到App大小
  33. if (hasProgress) {
  34. let current = parseInt(100 * task.downloadedSize / task.totalSize); //获取下载进度百分比
  35. progressCallBack(current)
  36. }
  37. break;
  38. case 4: // 下载完成
  39. break;
  40. }
  41. });
  42. //开始执行下载
  43. downloadTask.start();
  44. })
  45. }
  46. /**
  47. * @description H5+安装APP
  48. * @param fileName:app文件名
  49. * @param callBack:安装成功回调
  50. */
  51. export const installApp = (fileName, callBack = () => { }) => {
  52. //注册广播监听app安装情况
  53. onInstallListening(callBack);
  54. //开始安装
  55. plus.runtime.install(plus.io.convertLocalFileSystemURL(fileName), {}, () => {
  56. //成功跳转到安装界面
  57. }, function (error) {
  58. uni.showToast({
  59. title: '安装失败',
  60. duration: 1500,
  61. icon: "none"
  62. });
  63. })
  64. }
  65. /**
  66. * @description 注册广播监听APP是否安装成功
  67. * @param callBack:安装成功回调函数
  68. */
  69. const onInstallListening = (callBack = () => { }) => {
  70. let mainActivity = plus.android.runtimeMainActivity(); //获取activity
  71. //生成广播接收器
  72. let receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
  73. onReceive: (context, intent) => { //接收广播回调
  74. plus.android.importClass(intent);
  75. mainActivity.unregisterReceiver(receiver); //取消监听
  76. callBack()
  77. }
  78. });
  79. let IntentFilter = plus.android.importClass('android.content.IntentFilter');
  80. let Intent = plus.android.importClass('android.content.Intent');
  81. let filter = new IntentFilter();
  82. filter.addAction(Intent.ACTION_PACKAGE_ADDED); //监听APP安装
  83. filter.addDataScheme("package");
  84. mainActivity.registerReceiver(receiver, filter); //注册广播
  85. }