1# @ohos.resourceschedule.backgroundTaskManager (后台任务管理) 2 3本模块提供申请后台任务的接口。当应用退至后台时,开发者可以通过本模块接口为应用申请短时、长时任务,避免应用进程被终止或挂起。 4 5> **说明:** 6> 7> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9 10## 导入模块 11 12```ts 13import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 14``` 15 16## backgroundTaskManager.requestSuspendDelay 17 18requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspendInfo 19 20申请短时任务。 21 22> **说明:** 23> 24> 短时任务的申请时间最长为3分钟,[低电量](../apis-basic-services-kit/js-apis-battery-info.md)时最长为1分钟。 25 26**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask 27 28**参数**: 29 30| 参数名 | 类型 | 必填 | 说明 | 31| -------- | -------------------- | ---- | ------------------------------ | 32| reason | string | 是 | 申请短时任务的原因。 | 33| callback | Callback<void> | 是 | 短时任务即将超时的回调函数,一般在超时前6秒,通过此回调通知应用。 | 34 35**返回值**: 36 37| 类型 | 说明 | 38| ------------------------------------- | --------- | 39| [DelaySuspendInfo](#delaysuspendinfo) | 返回短时任务信息。 | 40 41**错误码**: 42 43以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 44 45| 错误码ID | 错误信息 | 46| --------- | ------- | 47| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types. | 48| 9800001 | Memory operation failed. | 49| 9800002 | Parcel operation failed. | 50| 9800003 | Internal transaction failed. | 51| 9800004 | System service operation failed. | 52| 9900001 | Caller information verification failed for a transient task. | 53| 9900002 | Transient task verification failed. | 54 55**示例**: 56 57```ts 58import { BusinessError } from '@kit.BasicServicesKit'; 59 60let myReason = 'test requestSuspendDelay'; 61try { 62 let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { 63 console.info("Request suspension delay will time out."); 64 }) 65 let id = delayInfo.requestId; 66 let time = delayInfo.actualDelayTime; 67 console.info("The requestId is: " + id); 68 console.info("The actualDelayTime is: " + time); 69} catch (error) { 70 console.error(`requestSuspendDelay failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 71} 72``` 73 74 75## backgroundTaskManager.getRemainingDelayTime 76 77getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>): void 78 79获取本次短时任务的剩余时间,使用callback异步回调。 80 81**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask 82 83**参数**: 84 85| 参数名 | 类型 | 必填 | 说明 | 86| --------- | --------------------------- | ---- | ---------------------------------------- | 87| requestId | number | 是 | 短时任务的请求ID。 | 88| callback | AsyncCallback<number> | 是 | 回调函数,返回本次短时任务的剩余时间,单位为毫秒。 | 89 90**错误码**: 91 92以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 93 94| 错误码ID | 错误信息 | 95| --------- | ------- | 96| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 97| 9800001 | Memory operation failed. | 98| 9800002 | Parcel operation failed. | 99| 9800003 | Internal transaction failed. | 100| 9800004 | System service operation failed. | 101| 9900001 | Caller information verification failed for a transient task. | 102| 9900002 | Transient task verification failed. | 103 104 105**示例**: 106 107```ts 108import { BusinessError } from '@kit.BasicServicesKit'; 109 110let id = 1; 111backgroundTaskManager.getRemainingDelayTime(id, (error: BusinessError, res: number) => { 112 if(error) { 113 console.error(`callback => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`); 114 } else { 115 console.log('callback => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res)); 116 } 117}) 118``` 119 120 121## backgroundTaskManager.getRemainingDelayTime 122 123getRemainingDelayTime(requestId: number): Promise<number> 124 125获取本次短时任务的剩余时间,使用promise异步回调。 126 127**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask 128 129**参数**: 130 131| 参数名 | 类型 | 必填 | 说明 | 132| --------- | ------ | ---- | ---------- | 133| requestId | number | 是 | 短时任务的请求ID。 | 134 135**返回值**: 136 137| 类型 | 说明 | 138| --------------------- | ---------------------------------------- | 139| Promise<number> | Promise对象,返回本次短时任务的剩余时间,单位为毫秒。 | 140 141**错误码**: 142 143以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 144 145| 错误码ID | 错误信息 | 146| --------- | ------- | 147| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 148| 9800001 | Memory operation failed. | 149| 9800002 | Parcel operation failed. | 150| 9800003 | Internal transaction failed. | 151| 9800004 | System service operation failed. | 152| 9900001 | Caller information verification failed for a transient task. | 153| 9900002 | Transient task verification failed. | 154 155**示例**: 156 157```ts 158import { BusinessError } from '@kit.BasicServicesKit'; 159 160let id = 1; 161backgroundTaskManager.getRemainingDelayTime(id).then((res: number) => { 162 console.log('promise => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res)); 163}).catch((error: BusinessError) => { 164 console.error(`promise => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`); 165}) 166``` 167 168 169## backgroundTaskManager.cancelSuspendDelay 170 171cancelSuspendDelay(requestId: number): void 172 173取消短时任务。 174 175**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask 176 177**参数**: 178 179| 参数名 | 类型 | 必填 | 说明 | 180| --------- | ------ | ---- | ---------- | 181| requestId | number | 是 | 短时任务的请求ID。 | 182 183**错误码**: 184 185以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 186 187| 错误码ID | 错误信息 | 188| --------- | ------- | 189| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 190| 9800001 | Memory operation failed. | 191| 9800002 | Parcel operation failed. | 192| 9800003 | Internal transaction failed. | 193| 9800004 | System service operation failed. | 194| 9900001 | Caller information verification failed for a transient task. | 195| 9900002 | Transient task verification failed. | 196 197**示例**: 198 199 ```js 200 import { BusinessError } from '@kit.BasicServicesKit'; 201 202 let id = 1; 203 try { 204 backgroundTaskManager.cancelSuspendDelay(id); 205 } catch (error) { 206 console.error(`cancelSuspendDelay failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 207 } 208 ``` 209 210## backgroundTaskManager.startBackgroundRunning 211 212startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent, callback: AsyncCallback<void>): void 213 214申请长时任务,使用callback异步回调。 215 216**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING 217 218**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 219 220**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 221 222**参数**: 223 224| 参数名 | 类型 | 必填 | 说明 | 225| --------- | ---------------------------------- | ---- | ---------------------------------------- | 226| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-application-context.md)。 | 227| bgMode | [BackgroundMode](#backgroundmode) | 是 | 长时任务模式。 | 228| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是 | 通知参数,用于指定点击长时任务通知后跳转的界面。 | 229| callback | AsyncCallback<void> | 是 | 回调函数,申请长时任务成功时,err为undefined,否则为错误对象。 | 230 231**错误码**: 232 233以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 234 235| 错误码ID | 错误信息 | 236| ---- | --------------------- | 237| 201 | Permission denied. | 238| 202 | Not System App. | 239| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 240| 9800001 | Memory operation failed. | 241| 9800002 | Parcel operation failed. | 242| 9800003 | Internal transaction failed. | 243| 9800004 | System service operation failed. | 244| 9800005 | Continuous task verification failed. | 245| 9800006 | Notification verification failed for a continuous task. | 246| 9800007 | Continuous task storage failed. | 247 248**示例**: 249 250```js 251import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 252import { BusinessError } from '@kit.BasicServicesKit'; 253import { wantAgent, WantAgent } from '@kit.AbilityKit'; 254import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 255 256function callback(error: BusinessError, data: void) { 257 if (error) { 258 console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 259 } else { 260 console.info("Operation startBackgroundRunning succeeded"); 261 } 262} 263 264export default class EntryAbility extends UIAbility { 265 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 266 let wantAgentInfo: wantAgent.WantAgentInfo = { 267 // 点击通知后,将要执行的动作列表 268 wants: [ 269 { 270 bundleName: "com.example.myapplication", 271 abilityName: "EntryAbility" 272 } 273 ], 274 // 点击通知后,动作类型 275 actionType: wantAgent.OperationType.START_ABILITY, 276 // 使用者自定义的一个私有值 277 requestCode: 0, 278 // 点击通知后,动作执行属性 279 wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG] 280 }; 281 282 try { 283 // 通过wantAgent模块下getWantAgent方法获取WantAgent对象 284 wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => { 285 try { 286 backgroundTaskManager.startBackgroundRunning(this.context, 287 backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj, callback) 288 } catch (error) { 289 console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 290 } 291 }); 292 } catch (error) { 293 console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 294 } 295 } 296}; 297``` 298 299## backgroundTaskManager.startBackgroundRunning 300 301startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent): Promise<void> 302 303申请长时任务,使用promise异步回调。 304 305**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING 306 307**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 308 309**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 310 311**参数**: 312 313| 参数名 | 类型 | 必填 | 说明 | 314| --------- | ---------------------------------- | ---- | ---------------------------------------- | 315| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-application-context.md)。 | 316| bgMode | [BackgroundMode](#backgroundmode) | 是 | 长时任务模式。 | 317| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是 | 通知参数,用于指定点击长时任务通知后跳转的界面。 | 318 319**返回值**: 320 321| 类型 | 说明 | 322| -------------- | ---------------- | 323| Promise\<void> | 无返回结果的Promise对象。 | 324 325**错误码**: 326 327以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 328 329| 错误码ID | 错误信息 | 330| ---- | --------------------- | 331| 201 | Permission denied. | 332| 202 | Not System App. | 333| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 334| 9800001 | Memory operation failed. | 335| 9800002 | Parcel operation failed. | 336| 9800003 | Internal transaction failed. | 337| 9800004 | System service operation failed. | 338| 9800005 | Continuous task verification failed. | 339| 9800006 | Notification verification failed for a continuous task. | 340| 9800007 | Continuous task storage failed. | 341 342**示例**: 343 344```js 345import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 346import { BusinessError } from '@kit.BasicServicesKit'; 347import { wantAgent, WantAgent } from '@kit.AbilityKit'; 348import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 349 350export default class EntryAbility extends UIAbility { 351 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 352 let wantAgentInfo: wantAgent.WantAgentInfo = { 353 // 点击通知后,将要执行的动作列表 354 wants: [ 355 { 356 bundleName: "com.example.myapplication", 357 abilityName: "EntryAbility" 358 } 359 ], 360 // 点击通知后,动作类型 361 actionType: wantAgent.OperationType.START_ABILITY, 362 // 使用者自定义的一个私有值 363 requestCode: 0, 364 // 点击通知后,动作执行属性 365 wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG] 366 }; 367 368 try { 369 // 通过wantAgent模块下getWantAgent方法获取WantAgent对象 370 wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => { 371 try { 372 backgroundTaskManager.startBackgroundRunning(this.context, 373 backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj).then(() => { 374 console.info("Operation startBackgroundRunning succeeded"); 375 }).catch((error: BusinessError) => { 376 console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 377 }); 378 } catch (error) { 379 console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 380 } 381 }); 382 } catch (error) { 383 console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 384 } 385 } 386}; 387``` 388 389## backgroundTaskManager.stopBackgroundRunning 390 391stopBackgroundRunning(context: Context, callback: AsyncCallback<void>): void 392 393取消长时任务,使用callback异步回调。 394 395**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 396 397**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 398 399**参数**: 400 401| 参数名 | 类型 | 必填 | 说明 | 402| -------- | ------------------------- | ---- | ---------------------------------------- | 403| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-application-context.md)。 | 404| callback | AsyncCallback<void> | 是 | 回调函数,取消长时任务成功时,err为undefined,否则为错误对象。| 405 406**错误码**: 407 408以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 409 410| 错误码ID | 错误信息 | 411| ---- | --------------------- | 412| 201 | Permission denied. | 413| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 414| 9800001 | Memory operation failed. | 415| 9800002 | Parcel operation failed. | 416| 9800003 | Internal transaction failed. | 417| 9800004 | System service operation failed. | 418| 9800005 | Continuous task verification failed. | 419| 9800006 | Notification verification failed for a continuous task. | 420| 9800007 | Continuous task storage failed. | 421 422**示例**: 423 424```js 425import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 426import { BusinessError } from '@kit.BasicServicesKit'; 427import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 428 429function callback(error: BusinessError, data: void) { 430 if (error) { 431 console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 432 } else { 433 console.info("Operation stopBackgroundRunning succeeded"); 434 } 435} 436 437export default class EntryAbility extends UIAbility { 438 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 439 try { 440 backgroundTaskManager.stopBackgroundRunning(this.context, callback); 441 } catch (error) { 442 console.error(`Operation stopBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 443 } 444 } 445}; 446``` 447 448## backgroundTaskManager.stopBackgroundRunning 449 450stopBackgroundRunning(context: Context): Promise<void> 451 452取消长时任务,使用promise异步回调。 453 454**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 455 456**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 457 458**参数**: 459 460| 参数名 | 类型 | 必填 | 说明 | 461| ------- | ------- | ---- | ---------------------------------------- | 462| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-application-context.md)。 | 463 464**返回值**: 465 466| 类型 | 说明 | 467| -------------- | ---------------- | 468| Promise\<void> | 无返回结果的Promise对象。 | 469 470**错误码**: 471 472以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 473 474| 错误码ID | 错误信息 | 475| ---- | --------------------- | 476| 201 | Permission denied. | 477| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. | 478| 9800001 | Memory operation failed. | 479| 9800002 | Parcel operation failed. | 480| 9800003 | Internal transaction failed. | 481| 9800004 | System service operation failed. | 482| 9800005 | Continuous task verification failed. | 483| 9800006 | Notification verification failed for a continuous task. | 484| 9800007 | Continuous task storage failed. | 485 486**示例**: 487 488```js 489import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 490import { BusinessError } from '@kit.BasicServicesKit'; 491import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 492 493export default class EntryAbility extends UIAbility { 494 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 495 try { 496 backgroundTaskManager.stopBackgroundRunning(this.context).then(() => { 497 console.info("Operation stopBackgroundRunning succeeded"); 498 }).catch((error: BusinessError) => { 499 console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 500 }); 501 } catch (error) { 502 console.error(`Operation stopBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 503 } 504 } 505}; 506``` 507 508## backgroundTaskManager.startBackgroundRunning<sup>12+</sup> 509 510startBackgroundRunning(context: Context, bgModes: string[], wantAgent: WantAgent): Promise<ContinuousTaskNotification> 511 512申请长时任务,使用promise异步回调。 513 514**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING 515 516**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 517 518**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 519 520**参数**: 521 522| 参数名 | 类型 | 必填 | 说明 | 523| --------- | ---------------------------------- | ---- | ---------------------------------------- | 524| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 应用运行的上下文。 | 525| bgModes | string[] | 是 | 长时任务模式,模式包括:dataTransfer, audioPlayback, audioRecording, location, bluetoothInteraction, multiDeviceConnection<br>dataTransfer:数据传输<br>audioPlayback:音频播放 <br>audioRecording:录制<br>location:定位导航<br>bluetoothInteraction:蓝牙相关<br>multiDeviceConnection:多设备互联<br>说明:可以传一个或者多个模式。| 526| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是 | 通知参数,用于指定点击长时任务通知后跳转的界面。 | 527 528**返回值**: 529 530| 类型 | 说明 | 531| -------------- | ---------------- | 532| Promise\<ContinuousTaskNotification> | 返回[ContinuousTaskNotification](#continuoustasknotification12)类型的Promise对象。 | 533 534**错误码**: 535 536以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 537 538| 错误码ID | 错误信息 | 539| ---- | --------------------- | 540| 201 | Permission denied. | 541| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 542| 9800001 | Memory operation failed. | 543| 9800002 | Parcel operation failed. | 544| 9800003 | Internal transaction failed. | 545| 9800004 | System service operation failed. | 546| 9800005 | Continuous task verification failed. | 547| 9800006 | Notification verification failed for a continuous task. | 548| 9800007 | Continuous task storage failed. | 549 550**示例**: 551 552```js 553import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 554import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 555import { window } from '@kit.ArkUI'; 556import { BusinessError } from '@kit.BasicServicesKit'; 557import { wantAgent, WantAgent } from '@kit.AbilityKit'; 558import { notificationManager } from '@kit.NotificationKit'; 559 560export default class EntryAbility extends UIAbility { 561 id: number = 0; // 保存通知id 562 563 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 564 let wantAgentInfo: wantAgent.WantAgentInfo = { 565 // 点击通知后,将要执行的动作列表 566 wants: [ 567 { 568 bundleName: "com.example.myapplication", 569 abilityName: "EntryAbility" 570 } 571 ], 572 // 点击通知后,动作类型 573 actionType: wantAgent.OperationType.START_ABILITY, 574 // 使用者自定义的一个私有值 575 requestCode: 0, 576 // 点击通知后,动作执行属性 577 wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG] 578 }; 579 580 try { 581 // 通过wantAgent模块下getWantAgent方法获取WantAgent对象 582 wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => { 583 try { 584 let list: Array<string> = ["dataTransfer"]; 585 backgroundTaskManager.startBackgroundRunning(this.context, list, wantAgentObj).then((res: backgroundTaskManager.ContinuousTaskNotification) => { 586 console.info("Operation startBackgroundRunning succeeded"); 587 // 对于上传下载类的长时任务,应用可以使用res中返回的notificationId来更新通知,比如发送带进度条的模板通知。 588 this.id = res.notificationId; 589 }).catch((error: BusinessError) => { 590 console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 591 }); 592 } catch (error) { 593 console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 594 } 595 }); 596 } catch (error) { 597 console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 598 } 599 } 600 601 updateProcess(process: Number) { 602 // 应用定义下载类通知模版 603 let downLoadTemplate: notificationManager.NotificationTemplate = { 604 name: 'downloadTemplate', // 当前只支持downloadTemplate,保持不变 605 data: { 606 title: '文件下载:music.mp4', // 必填。 607 fileName: 'senTemplate', // 必填。 608 progressValue: process, // 应用更新进度值,自定义。 609 } 610 }; 611 let request: notificationManager.NotificationRequest = { 612 content: { 613 // 系统实况类型,保持不变 614 notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW, 615 systemLiveView: { 616 typeCode: 8, // 上传下载类型需要填写 8,当前仅支持此类型。保持不变 617 title: "test", // 应用自定义 618 text: "test", // 应用自定义 619 } 620 }, 621 id: this.id, // 必须是申请长时任务返回的id,否则应用更新通知失败。 622 notificationSlotType: notificationManager.SlotType.LIVE_VIEW, // 实况窗类型,保持不变 623 template: downLoadTemplate // 应用需要设置的模版名称 624 }; 625 626 try { 627 notificationManager.publish(request).then(() => { 628 console.info("publish success, id= " + this.id); 629 }).catch((err: BusinessError) => { 630 console.error(`publish fail: ${JSON.stringify(err)}`); 631 }); 632 } catch (err) { 633 console.error(`publish fail: ${JSON.stringify(err)}`); 634 } 635 } 636}; 637``` 638## backgroundTaskManager.updateBackgroundRunning<sup>12+</sup> 639 640updateBackgroundRunning(context: Context, bgModes: string[]): Promise<ContinuousTaskNotification> 641 642更新长时任务,使用promise异步回调。 643 644**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING 645 646**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 647 648**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 649 650**参数**: 651 652| 参数名 | 类型 | 必填 | 说明 | 653| --------- | ---------------------------------- | ---- | ---------------------------------------- | 654| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 应用运行的上下文。 | 655| bgModes | string[] | 是 | 长时任务模式,模式包括:dataTransfer, audioPlayback, audioRecording, location, bluetoothInteraction, multiDeviceConnection<br>dataTransfer:数据传输<br>audioPlayback:音频播放 <br>audioRecording:录制<br>location:定位导航<br>bluetoothInteraction:蓝牙相关<br>multiDeviceConnection:多设备互联<br>说明:可以传一个或者多个模式。 656 657**返回值**: 658 659| 类型 | 说明 | 660| -------------- | ---------------- | 661| Promise\<ContinuousTaskNotification> | 返回[ContinuousTaskNotification](#continuoustasknotification12)类型的Promise对象。 | 662 663**错误码**: 664 665以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)和[通用错误码](../errorcode-universal.md)。 666 667| 错误码ID | 错误信息 | 668| ---- | --------------------- | 669| 201 | Permission denied. | 670| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. | 671| 9800001 | Memory operation failed. | 672| 9800002 | Parcel operation failed. | 673| 9800003 | Internal transaction failed. | 674| 9800004 | System service operation failed. | 675| 9800005 | Continuous task verification failed. | 676| 9800006 | Notification verification failed for a continuous task. | 677| 9800007 | Continuous task storage failed. | 678 679**示例**: 680 681```js 682import { backgroundTaskManager } from '@kit.BackgroundTasksKit'; 683import { BusinessError } from '@kit.BasicServicesKit'; 684import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 685 686export default class EntryAbility extends UIAbility { 687 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 688 try { 689 try { 690 // 必须先执行startBackgroundRunning,才能调用updateBackgroundRunning。这里假设已经申请过。 691 let list: Array<string> = ["audioPlayback"]; 692 backgroundTaskManager.updateBackgroundRunning(this.context, list).then(() => { 693 console.info("Operation updateBackgroundRunning succeeded"); 694 }).catch((error: BusinessError) => { 695 console.error(`Operation updateBackgroundRunning failed. code is ${error.code} message is ${error.message}`); 696 }); 697 } catch (error) { 698 console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 699 } 700 } catch (error) { 701 console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 702 } 703 } 704}; 705``` 706 707## DelaySuspendInfo 708 709短时任务信息。 710 711**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask 712 713| 名称 | 类型 | 必填 | 说明 | 714| --------------- | ------ | ---- | ---------------------------------------- | 715| requestId | number | 是 | 短时任务的请求ID。 | 716| actualDelayTime | number | 是 | 应用实际申请的短时任务时间,单位为毫秒。<br/>短时任务申请时间最长为3分钟,[低电量](../apis-basic-services-kit/js-apis-battery-info.md)时最长为1分钟。 | 717 718## BackgroundMode 719 720长时任务模式。 721 722**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 723 724| 名称 | 值 | 说明 | 725| ----------------------- | ---- | --------------------- | 726| DATA_TRANSFER | 1 | 数据传输。 | 727| AUDIO_PLAYBACK | 2 | 音频播放。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 728| AUDIO_RECORDING | 3 | 录制。 | 729| LOCATION | 4 | 定位导航。 | 730| BLUETOOTH_INTERACTION | 5 | 蓝牙相关。 | 731| MULTI_DEVICE_CONNECTION | 6 | 多设备互联。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 732| VOIP<sup>13+</sup> | 8 | 音视频通话。 | 733| TASK_KEEPING | 9 | 计算任务(仅对特定设备开放)。 | 734 735## ContinuousTaskNotification<sup>12+</sup> 736 737长时任务通知信息。 738 739**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 740 741**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask 742 743| 名称 | 类型 | 必填 | 说明 | 744| --------------- | ------ | ---- | ---------------------------------------- | 745| slotType | [notificationManager.SlotType](../apis-notification-kit/js-apis-notificationManager.md#slottype) | 是 | 长时任务通知的渠道类型。| 746| contentType | [notificationManager.ContentType](../apis-notification-kit/js-apis-notificationManager.md#contenttype) | 是 | 长时任务通知的内容类型。| 747| notificationId | number | 是 | 长时任务通知 Id。|