• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3533

entry/06-May-2025-1,4951,382

hvigor/06-May-2025-2322

screenshots/device/06-May-2025-

signTool/06-May-2025-230224

.gitignoreD06-May-2025125 109

README_zh.mdD06-May-20256.4 KiB9774

build-profile.json5D06-May-20251,012 4140

hvigorfile.jsD06-May-2025168 21

hvigorwD06-May-20252 KiB6228

hvigorw.batD06-May-20252 KiB7356

oh-package.json5D06-May-2025834 2625

ohosTest.mdD06-May-2025487 108

README_zh.md

1# 延迟任务调度
2
3### 介绍
4
5本示例使用[@ohos.WorkSchedulerExtensionAbility](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-backgroundtasks-kit/js-apis-WorkSchedulerExtensionAbility.md)
6、[@ohos.net.http](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-network-kit/js-apis-http.md)
7、[@ohos.notification](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-notification-kit/js-apis-notification.md)
8、[@ohos.bundle](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-ability-kit/js-apis-Bundle-sys.md)
9、[@ohos.fileio](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-core-file-kit/js-apis-fileio.md) 等接口,实现了设置后台任务、下载更新包
10、保存更新包、发送通知 、安装更新包实现升级的功能。
11
12### 效果预览
13
14|当前版本首页                             |提示弹窗                                 |新版本                                |
15|---------------------------------------|---------------------------------------|---------------------------------------|
16|![image](screenshots/device/oldVersion.png)|![image](screenshots/device/dialog.png)|![image](screenshots/device/newVersion.png)|
17
18使用说明
19
201. 安装本应用之前,先编译好未签名的应用包,然后在终端执行工程里的脚本,目录为:WorkScheduler/signTool/b_sign_hap_release.bat212. 未连接wifi状态下进入应用;
223. 进入首页后连接wifi;
234. 后台判断版本号后会下载新的升级包,并在页面中给出弹窗询问是否安装,点击“确定”按钮;
245. 应用会安装已经下载的升级包,实现版本更新,安装后会回到设备桌面,此时点击应用图标,可以看到版本已经是新版本了。
256. 运行自动化测试用例时,必须使用命令行装包,不能使用ide自动装包,安装自动化测试包之前,先编译好未签名的测试包,
26然后在终端执行工程里的脚本,目录为:WorkScheduler/signTool/a_sign_hap_release.bat277. 运行自动化测试应用时需要使用如下命令:
28```
29hdc shell aa test -b ohos.samples.workschedulerextensionability -m entry_test -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -s timeout 150000
30```
31
32### 工程目录
33```
34entry/src/main/ets/
35|---Application
36|   |---MyAbilityStage.ets                  // 入口文件
37|---feature
38|   |---WorkSchedulerSystem.ets             // 封装各个功能接口
39|---MainAbility
40|   |---MainAbility.ets                     // 请求权限
41|---pages
42|   |---Index.ets                           // 首页
43|---util
44|   |---Logger.ets                          // 日志文件
45|---WorkSchedulerAbility
46|   |---WorkSchedulerAbility.ets            // 延迟任务触发后的回调
47```
48
49### 具体实现
50
51* 设置延迟任务、下载更新包、保存更新包、发送通知、安装更新包的功能接口都封装在WorkSchedulerSystem中,
52  源码参考:[WorkSchedulerSystem.ets](entry/src/main/ets/feature/WorkSchedulerSystem.ets)
53  * 设置延迟任务:在运行示例时会在[MainAbility.ets](entry/src/main/ets/MainAbility/MainAbility.ets)
54  通过WorkSchedulerSystem.startUpdateSample()方法调用workScheduler.startWork()建立任务;
55  * 下载更新包:当任务条件满足后,会在[WorkSchedulerAbility.ets](entry/src/main/ets/WorkSchedulerAbility/WorkSchedulerAbility.ets)
56  通过WorkSchedulerSystem.getNewHap()方法调用http.createHttp().request()接口下载需要的文件;
57  * 保存更新包:通过WorkSchedulerSystem.saveFile()来实现,受限调用fileio.openSync()创建文件,然后调用fileio.writeSync()将下载的内容写入指定文件内;
58  * 发送通知:在[WorkSchedulerAbility.ets](entry/src/main/ets/WorkSchedulerAbility/WorkSchedulerAbility.ets)
59  中通过WorkSchedulerSystem.publishNotification()方法,调用Notification.publish()接口发送指定内容的信息;
60  * 接收通知:在[MainAbility.ets](entry/src/main/ets/MainAbility/MainAbility.ets)
61  中通过WorkSchedulerSystem.handleNotification()方法调用Notification.subscribe()接口获取信息,根据信息内容决定是否提示用户升级;
62  * 安装更新包:在[WorkSchedulerAbility.ets](entry/src/main/ets/WorkSchedulerAbility/WorkSchedulerAbility.ets)
63  通过WorkSchedulerSystem.installBundle()方法实现,首先调用bundle.getBundleInstaller()获取Installer对象,然后调用bundleInstall.install()接口实现装包,完成升级。
64
65### 相关权限
66
67[ohos.permission.INTERNET](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-all.md#ohospermissioninternet)
68
69[ohos.permission.INSTALL_BUNDLE](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissioninstall_bundle)
70
71[ohos.permission.NOTIFICATION_CONTROLLER](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md#ohospermissionnotification_controller)
72
73### 依赖
74
75不涉及。
76
77### 约束与限制
78
791. 本示例仅支持标准系统上运行。
80
812. 本示例已适配API version 9版本SDK,本示例涉及使用系统接口:@ohos.bundle,需要手动替换Full
82    SDK才能编译通过,具体操作可参考[替换指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/faqs/full-sdk-switch-guide.md)83
843. 本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400, built on April 7, 2023)及以上版本才可编译运行;
85
864. 本示例所配置的权限ohos.permission.INSTALL_BUNDLEohos.permission.NOTIFICATION_CONTROLLER为system_core级别(
87    相关权限级别可通过[权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md)查看),需要手动配置对应级别的权限签名(具体操作可查看[自动化签名方案](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V3/ohos-auto-configuring-signature-information-0000001271659465-V3))88
89### 下载
90
91如需单独下载本工程,执行如下命令:
92
93    git init
94    git config core.sparsecheckout true
95    echo code/SystemFeature/TaskManagement/WorkScheduler/ > .git/info/sparse-checkout
96    git remote add origin https://gitee.com/openharmony/applications_app_samples.git
97    git pull origin master