diff --git a/uni_modules/uni-progress-notification/changelog.md b/uni_modules/uni-progress-notification/changelog.md new file mode 100644 index 0000000000000000000000000000000000000000..1066eb5a7cdddcc5d0ff22cf7ba5a83230255e4f --- /dev/null +++ b/uni_modules/uni-progress-notification/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2023-11-30) +1. createNotificationProgress增加`onClick`回调 +2.修复在小米部分系统上,通知消息会归类于不重要通知的bug +## 1.0.3(2023-11-28) +更新截图 +## 1.0.2(2023-11-28) +修改资源的包名 +## 1.0.1(2023-11-28) +更新文档 +## 1.0.0(2023-11-28) +Android通知栏显示进度插件 diff --git a/uni_modules/uni-progress-notification/package.json b/uni_modules/uni-progress-notification/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e4bae82b995698adfd14faa7699a2cba3d57304b --- /dev/null +++ b/uni_modules/uni-progress-notification/package.json @@ -0,0 +1,111 @@ +{ + "id": "uni-progress-notification", + "displayName": "uni-progress-notification", + "version": "1.0.4", + "description": "uni-progress-notification", + "keywords": [ + "uni-progress-notification" +], + "repository": "", + "engines": { + "HBuilderX": "^3.91" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "TargetSDKVersion33以上时需配置\n`android.permission.POST_NOTIFICATIONS`" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "uni-ext-api": { + "uni": { + "createNotificationProgress": { + "name": "createNotificationProgress", + "app": { + "js": true, + "kotlin": true, + "swift": false + } + }, + "finishNotificationProgress": { + "name": "finishNotificationProgress", + "app": { + "js": true, + "kotlin": true, + "swift": false + } + }, + "cancelNotificationProgress": { + "name": "cancelNotificationProgress", + "app": { + "js": true, + "kotlin": true, + "swift": false + } + } + } + }, + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-android": { + "minVersion": "19" + }, + "app-ios": "n" + }, + "H5-mobile": { + "Safari": "n", + "Android Browser": "n", + "微信浏览器(Android)": "n", + "QQ浏览器(Android)": "n" + }, + "H5-pc": { + "Chrome": "n", + "IE": "n", + "Edge": "n", + "Firefox": "n", + "Safari": "n" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/readme.md b/uni_modules/uni-progress-notification/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..be5363d721e07237b7565967b677fa2f2ea950eb --- /dev/null +++ b/uni_modules/uni-progress-notification/readme.md @@ -0,0 +1,67 @@ +# uni-download-notification + +## 使用说明 + +Android平台创建显示进度的通知栏消息 + +**注意: 需要自定义基座,否则点击通知栏消息不会拉起应用** + +### uni.createNotificationProgress(options : CreateNotificationProgressOptions) : void, + +创建显示进度的通知栏消息 + +参数说明 + +``` +export type CreateNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 进度 + */ + progress : number, + /** + * 点击通知消息回调 + * @defaultValue null + */ + onClick? : (() => void) | null +} +``` + +### uni.finishNotificationProgress(options: FinishNotificationProgressOptions) : void + +完成时调用的API,比如下载完成后需要显示下载完成并隐藏进度时调用。 + +参数说明 + + +``` +export type FinishNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 点击通知消息回调 + */ + onClick : () => void +} +``` + + +### cancelNotificationProgress() : void + +取消通知消息显示 + diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/AndroidManifest.xml b/uni_modules/uni-progress-notification/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..8938084c2a4cd024c6e95be2df9d34e12a32be32 --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/TransparentActivity.uts b/uni_modules/uni-progress-notification/utssdk/app-android/TransparentActivity.uts new file mode 100644 index 0000000000000000000000000000000000000000..670605d3761934f7db4d4e21bec9638ba051c659 --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/TransparentActivity.uts @@ -0,0 +1,61 @@ +import Activity from "android.app.Activity"; +import Bundle from 'android.os.Bundle'; +import Build from 'android.os.Build'; +import View from 'android.view.View'; +import Color from 'android.graphics.Color'; +import WindowManager from 'android.view.WindowManager'; +import { globalNotificationProgressFinishCallBack, globalNotificationProgressCallBack } from './index.uts'; +import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts" + + +export class TransparentActivity extends Activity { + constructor() { + super() + } + + override onCreate(savedInstanceState : Bundle | null) { + super.onCreate(savedInstanceState) + this.fullScreen(this) + const action = this.getIntent().getAction() + if (action == ACTION_DOWNLOAD_FINISH) { + setTimeout(() => { + globalNotificationProgressFinishCallBack() + globalNotificationProgressFinishCallBack = () => { } + }, 100) + this.overridePendingTransition(0, 0) + } + + if (action == ACTION_DOWNLOAD_PROGRESS) { + setTimeout(() => { + globalNotificationProgressCallBack?.() + globalNotificationProgressCallBack = () => { } + }, 100) + this.overridePendingTransition(0, 0) + } + + setTimeout(() => { + this.finish() + }, 20) + } + + + @Suppress("DEPRECATION") + private fullScreen(activity : Activity) { + if (Build.VERSION.SDK_INT >= 19) { + if (Build.VERSION.SDK_INT >= 21) { + const window = activity.getWindow(); + const decorView = window.getDecorView(); + const option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + decorView.setSystemUiVisibility(option); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + } else { + const window = activity.getWindow(); + const attributes = window.getAttributes(); + const flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; + attributes.flags |= flagTranslucentStatus; + window.setAttributes(attributes); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/config.json b/uni_modules/uni-progress-notification/utssdk/app-android/config.json new file mode 100644 index 0000000000000000000000000000000000000000..7ed4299898bcce833a4b7b6de7c4ef4d4ac999da --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/config.json @@ -0,0 +1,3 @@ +{ + "minSdkVersion": "19" +} \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/constant.uts b/uni_modules/uni-progress-notification/utssdk/app-android/constant.uts new file mode 100644 index 0000000000000000000000000000000000000000..e89c210d021028fc01398785c1d1ac1c19c785e2 --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/constant.uts @@ -0,0 +1,2 @@ +export const ACTION_DOWNLOAD_FINISH = "ACTION_DOWNLOAD_FINISH" +export const ACTION_DOWNLOAD_PROGRESS = "ACTION_DOWNLOAD_PROGRESS" \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/index.uts b/uni_modules/uni-progress-notification/utssdk/app-android/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..a88fc456f4e55a07864cbf5069674d4962aafd37 --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/index.uts @@ -0,0 +1,159 @@ +import Build from 'android.os.Build'; +import Context from 'android.content.Context'; +import NotificationManager from 'android.app.NotificationManager'; +import NotificationChannel from 'android.app.NotificationChannel'; +import Notification from 'android.app.Notification'; +import Intent from 'android.content.Intent'; +import ComponentName from 'android.content.ComponentName'; +import PendingIntent from 'android.app.PendingIntent'; +import { CreateNotificationProgressOptions, FinishNotificationProgressOptions } from '../interface.uts'; +import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts" + + +export { TransparentActivity } from './TransparentActivity.uts'; + + +const DOWNLOAD_PROGRESS_NOTIFICATION_ID : Int = 7890 +const DC_DOWNLOAD_CHANNEL_ID = "下载文件" +const DC_DOWNLOAD_CHANNEL_NAME = "用于显示现在进度的渠道" + + +let notificationBuilder : Notification.Builder | null = null + +let timeId = -1 + +let histroyProgress = 0 + +let isProgress = false + +export let globalNotificationProgressCallBack : (() => void) | null = () => { } +export let globalNotificationProgressFinishCallBack = () => { } + +export function createNotificationProgress(options : CreateNotificationProgressOptions) : void { + const { content, progress, onClick } = options + + if (progress == 100) { + clearTimeout(timeId) + const context = UTSAndroid.getAppContext() as Context + realCreateNotificationProgress(options.title ?? getAppName(context), content, progress, onClick) + reset() + return + } + + histroyProgress = progress + if (timeId != -1) { + return + } + + const context = UTSAndroid.getAppContext() as Context + if (!isProgress) { + realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick) + isProgress = true + } else { + timeId = setTimeout(() => { + realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick) + timeId = -1 + }, 1000) + } +} + + +export function cancelNotificationProgress() : void { + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.cancel(DOWNLOAD_PROGRESS_NOTIFICATION_ID) + reset() +} + + +function realCreateNotificationProgress(title : string, content : string, progress : number, cb : (() => void) | null) : void { + globalNotificationProgressCallBack = cb + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + createDownloadChannel(notificationManager) + const builder = createNotificationBuilder(context) + builder.setProgress(100, progress.toInt(), false) + builder.setContentTitle(title) + builder.setContentText(content) + builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_PROGRESS)); + notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build()) +} + + +export function finishNotificationProgress(options : FinishNotificationProgressOptions) { + globalNotificationProgressFinishCallBack = options.onClick + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + createDownloadChannel(notificationManager) + const builder = createNotificationBuilder(context) + builder.setProgress(0, 0, false) + builder.setContentTitle(options.title ?? getAppName(context)) + builder.setContentText(options.content) + //小米rom setOngoing未false的时候,会被通知管理器归为不重要通知 + // builder.setOngoing(false) + builder.setAutoCancel(true); + builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_FINISH)); + notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build()) + reset() +} + +function reset() { + isProgress = false + notificationBuilder = null + histroyProgress = 0 + if (timeId != -1) { + clearTimeout(timeId) + timeId = -1 + } +} + + + +function createPendingIntent(context : Context, action : string) : PendingIntent { + const i = new Intent(action); + i.setComponent(new ComponentName(context.getPackageName(), "uts.sdk.modules.uniProgressNotification.TransparentActivity")); + let flags = PendingIntent.FLAG_ONE_SHOT; + if (Build.VERSION.SDK_INT >= 23) { + flags = PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE; + } + return PendingIntent.getActivity(context, DOWNLOAD_PROGRESS_NOTIFICATION_ID, i, flags); +} + + +function createDownloadChannel(notificationManager : NotificationManager) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + const channel = new NotificationChannel( + DC_DOWNLOAD_CHANNEL_ID, + DC_DOWNLOAD_CHANNEL_NAME, + NotificationManager.IMPORTANCE_LOW + ) + notificationManager.createNotificationChannel(channel) + } +} +@Suppress("DEPRECATION") +function createNotificationBuilder(context : Context) : Notification.Builder { + if (notificationBuilder == null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + notificationBuilder = new Notification.Builder(context, DC_DOWNLOAD_CHANNEL_ID) + } else { + notificationBuilder = new Notification.Builder(context) + } + notificationBuilder!.setSmallIcon(context.getApplicationInfo().icon) + notificationBuilder!.setOngoing(true) + notificationBuilder!.setSound(null) + } + return notificationBuilder! +} + +@Suppress("DEPRECATION") +function getAppName(context : Context) : string { + let appName = "" + try { + const packageManager = context.getPackageManager() + const applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0) + appName = packageManager.getApplicationLabel(applicationInfo) as string + } catch (e : Exception) { + e.printStackTrace() + } + return appName +} \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-android/res/values/notification_progress_styles.xml b/uni_modules/uni-progress-notification/utssdk/app-android/res/values/notification_progress_styles.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc01105b78513e66c7e1086ffe5ff564c71ae34f --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-android/res/values/notification_progress_styles.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-ios/config.json b/uni_modules/uni-progress-notification/utssdk/app-ios/config.json new file mode 100644 index 0000000000000000000000000000000000000000..721b81e0240705a87ec0761aa9eb6f4e188769cb --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-ios/config.json @@ -0,0 +1,3 @@ +{ + "deploymentTarget": "9" +} \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/app-ios/index.uts b/uni_modules/uni-progress-notification/utssdk/app-ios/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..c24f8c2c8d2e4baa2d11cb72937de1645125a9cd --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/app-ios/index.uts @@ -0,0 +1,85 @@ +/** + * 引用 iOS 系统库,示例如下: + * import { UIDevice } from "UIKit"; + * [可选实现,按需引入] + */ + +/* 引入 interface.uts 文件中定义的变量 */ +import { MyApiOptions, MyApiResult, MyApi, MyApiSync } from '../interface.uts'; + +/* 引入 unierror.uts 文件中定义的变量 */ +import { MyApiFailImpl } from '../unierror'; + +/** + * 引入三方库 + * [可选实现,按需引入] + * + * 在 iOS 平台引入三方库有以下两种方式: + * 1、通过引入三方库framework 或者.a 等方式,需要将 .framework 放到 ./Frameworks 目录下,将.a 放到 ./Libs 目录下。更多信息[详见](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#ios-平台原生配置) + * 2、通过 cocoaPods 方式引入,将要引入的 pod 信息配置到 config.json 文件下的 dependencies-pods 字段下。详细配置方式[详见](https://uniapp.dcloud.net.cn/plugin/uts-ios-cocoapods.html) + * + * 在通过上述任意方式依赖三方库后,使用时需要在文件中 import: + * 示例:import { LottieLoopMode } from 'Lottie' + */ + +/** + * UTSiOS 为平台内置对象,不需要 import 可直接调用其API,[详见](https://uniapp.dcloud.net.cn/uts/utsios.html) + */ + +/** + * 异步方法 + * + * uni-app项目中(vue/nvue)调用示例: + * 1、引入方法声明 import { myApi } from "@/uni_modules/uts-api" + * 2、方法调用 + * myApi({ + * paramA: false, + * complete: (res) => { + * console.log(res) + * } + * }); + * + */ +export const myApi : MyApi = function (options : MyApiOptions) { + + if (options.paramA == true) { + // 返回数据 + const res : MyApiResult = { + fieldA: 85, + fieldB: true, + fieldC: 'some message' + }; + options.success?.(res); + options.complete?.(res); + + } else { + // 返回错误 + let failResult = new MyApiFailImpl(9010001); + options.fail?.(failResult) + options.complete?.(failResult) + } + +} + +/** + * 同步方法 + * + * uni-app项目中(vue/nvue)调用示例: + * 1、引入方法声明 import { myApiSync } from "@/uni_modules/uts-api" + * 2、方法调用 + * myApiSync(true); + * + */ +export const myApiSync : MyApiSync = function (paramA : boolean) : MyApiResult { + // 返回数据,根据插件功能获取实际的返回值 + const res : MyApiResult = { + fieldA: 85, + fieldB: paramA, + fieldC: 'some message' + }; + return res; +} + +/** + * 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html + */ diff --git a/uni_modules/uni-progress-notification/utssdk/interface.uts b/uni_modules/uni-progress-notification/utssdk/interface.uts new file mode 100644 index 0000000000000000000000000000000000000000..e0e4799ecf1ee027157f235fdcd40264a01f71bc --- /dev/null +++ b/uni_modules/uni-progress-notification/utssdk/interface.uts @@ -0,0 +1,145 @@ +export type uni = { + /** + * createNotificationProgress() + * @description + * 创建通知栏下载进度消息 + * @param {CreateNotificationProgressOptions} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.9+", + * "unixVer": "3.9+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.createNotificationProgress({ + title: "正在下载升级包", + content: "进度 50%", + progress: 50, + onClick:()=>{ + console.log("正在下载"); + } + } + ``` + */ + createNotificationProgress : (options : CreateNotificationProgressOptions) => void, + /** + * finishNotificationProgress() + * @description + * 通知栏显示下载完成,并且传入点击通知栏消息的回调。 + * @param {FinishNotificationProgressOptions} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.9+", + * "unixVer": "3.9+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.finishNotificationProgress({ + title: "安装升级包", + content: "下载完成。", + onClick: () => { + uni.installApk({ + filePath: e.tempFilePath, + complete(res) { + console.log(res); + } + }) + } + } + ``` + */ + finishNotificationProgress : (options: FinishNotificationProgressOptions) => void, + /** + * cancelNotificationProgress() + * @description + * 取消通知消息显示 + * @param {void} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.9+", + * "unixVer": "3.9+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.cancelNotificationProgress() + ``` + */ + cancelNotificationProgress : () => void +} + +export type CreateNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 进度 + */ + progress : number, + /** + * 点击通知消息回调 + * @defaultValue null + */ + onClick? : (() => void) | null +} + + +export type FinishNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 点击通知消息回调 + */ + onClick : () => void +} + + +export type CreateNotificationProgress = (options : CreateNotificationProgressOptions) => void; + + +export type CancelNotificationProgress = () => void; + + +export type FinishNotificationProgress = (options: FinishNotificationProgressOptions) => void \ No newline at end of file diff --git a/uni_modules/uni-progress-notification/utssdk/unierror.uts b/uni_modules/uni-progress-notification/utssdk/unierror.uts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue b/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue index 99e76e997c3ddb36ee35bfdf7ad6f16702c03d45..e16b5e793db736a67e987813a17e874199839035 100644 --- a/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue +++ b/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue @@ -46,8 +46,8 @@ {{installing ? '正在安装……' : '下载完成,立即安装'}} - @@ -67,9 +67,11 @@ const localFilePathKey = 'UNI_ADMIN_UPGRADE_CENTER_LOCAL_FILE_PATH' const platform_iOS = 'iOS'; + const platform_Android = 'Android'; const requiredKey = ['version', 'url', 'type'] let downloadTask : DownloadTask | null = null; let openSchemePromise: Promise | null = null; + let notificationAbortDownload: boolean = false /** * 对比版本号,如需要,请自行修改判断规则 @@ -115,6 +117,7 @@ } export default { + emits: ['close'], data() { return { shown: false, @@ -141,23 +144,33 @@ contents: '', version: '', is_mandatory: false, + url: "", + platform: [] as string[], + store_list: null as StoreListItem[] | null, // 可自定义属性 subTitle: '发现新版本', downLoadBtnTextiOS: '立即跳转更新', downLoadBtnText: '立即下载更新', - downLoadingText: '安装包下载中,请稍后', - - url: "", - platform: [] as string[], - store_list: null as StoreListItem[] | null + downLoadingText: '安装包下载中,请稍后' } }, computed: { isiOS() : boolean { return this.platform.includes(platform_iOS); + }, + isAndroid() : boolean { + return this.platform.includes(platform_Android); + }, + needNotificationProgress(): boolean { + return this.isAndroid && !this.is_mandatory } }, + beforeUnmount() { + if (this.needNotificationProgress) { + uni.cancelNotificationProgress() + } + }, methods: { show(shown : boolean, localPackageInfo : UniUpgradeCenterResult | null) { if (localPackageInfo === null) return; @@ -181,6 +194,19 @@ this.store_list = localPackageInfo.store_list this.shown = shown }, + askAbortDownload() { + uni.showModal({ + title: '是否取消下载?', + cancelText: '否', + confirmText: '是', + success: res => { + if (res.confirm) { + if (downloadTask !== null) downloadTask!.abort() + this.closePopup() + } + } + }); + }, closeUpdate() { if (this.downloading) { if (this.is_mandatory) { @@ -190,18 +216,10 @@ duration: 500 }) } - uni.showModal({ - title: '是否取消下载?', - cancelText: '否', - confirmText: '是', - success: res => { - if (res.confirm) { - if (downloadTask !== null) downloadTask!.abort() - this.closePopup() - } - } - }); - return; + if (!this.needNotificationProgress) { + this.askAbortDownload() + return; + } } this.closePopup() }, @@ -222,7 +240,11 @@ this.installed = false this.showTabbar = false - this.$emit('close') + if (this.needNotificationProgress) uni.cancelNotificationProgress() + + if (!notificationAbortDownload) this.$emit('close') + + notificationAbortDownload = false }, updateApp() { const checkStoreScheme = this.checkStoreScheme() @@ -261,7 +283,6 @@ downloadTask = uni.downloadFile({ url: this.url, success: res => { - console.log('downloadFile res: ', res); if (res.statusCode == 200) { this.tempFilePath = res.tempFilePath this.downLoadComplete() @@ -273,10 +294,27 @@ }); if (downloadTask !== null) { this.downloading = true; + if (this.needNotificationProgress) { + this.closePopup() + } downloadTask!.onProgressUpdate(res => { this.downLoadPercent = parseFloat(res.progress.toFixed(0)); this.downloadedSize = parseFloat((res.totalBytesWritten / Math.pow(1024, 2)).toFixed(2)); this.packageFileSize = parseFloat((res.totalBytesExpectedToWrite / Math.pow(1024, 2)).toFixed(2)); + + if (this.needNotificationProgress) { + uni.createNotificationProgress({ + title: "升级中心正在下载安装包……", + content: `${this.downLoadPercent}%`, + progress: this.downLoadPercent, + onClick: () => { + if (!this.downloadSuccess) { + this.askAbortDownload() + notificationAbortDownload = true + } + } + }) + } }); } }, @@ -290,9 +328,20 @@ downloadTask = null; + if (this.needNotificationProgress) { + uni.finishNotificationProgress({ + title: "安装升级包", + content: "下载完成", + onClick(){} + }) + + this.installPackage(); + return + } + // 强制更新,直接安装 if (this.is_mandatory) { - this.installPackage(); + this.installPackage(); } }, installPackage() { @@ -306,7 +355,7 @@ this.installed = true; }, fail: err => { - console.log('installApk fail'); + console.error('installApk fail', err); // 安装失败需要重新下载安装包 this.installing = false; this.installed = false; @@ -319,7 +368,7 @@ } }); - // 非wgt包,安装跳出覆盖安装,此处直接返回上一页 + // 安装跳出覆盖安装,此处直接返回上一页 if (!this.is_mandatory) { uni.navigateBack() } diff --git a/uni_modules/uni-upgrade-center-app/package.json b/uni_modules/uni-upgrade-center-app/package.json index 8869b744c2901aad2bddd4e46ca9d5a62fe6bee2..7bb89a143f205e5f5d8ebadf0b8dcd812d3b90f2 100644 --- a/uni_modules/uni-upgrade-center-app/package.json +++ b/uni_modules/uni-upgrade-center-app/package.json @@ -34,7 +34,9 @@ "type": "unicloud-template-page" }, "uni_modules": { - "dependencies": [], + "dependencies": [ + "uni-progress-notification" + ], "encrypt": [], "platforms": { "cloud": { diff --git a/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue index b82cdc1965d68cfd22be0e08e748c6279d321b99..d6619345a4ef76079f26b6a3dd9d9559198468de 100644 --- a/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue +++ b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue @@ -10,7 +10,7 @@ {{subTitle}} - + {{version}} @@ -44,8 +44,12 @@ plain :loading="installing" :disabled="installing" @click="installPackage"> {{installing ? '正在安装……' : '下载完成,立即安装'}} + - @@ -62,6 +66,7 @@