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