• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.resourceschedule.backgroundTaskManager (后台任务管理)
2
3<!--Kit: Background Tasks Kit-->
4<!--Subsystem: ResourceSchedule-->
5<!--Owner: @cheng-shichang-->
6<!--Designer: @zhouben25-->
7<!--Tester: @fenglili18-->
8<!--Adviser: @Brilliantry_Rui-->
9
10本模块提供申请后台任务的接口。当应用退至后台时,开发者可以通过本模块接口为应用申请短时、长时任务,避免应用进程被终止或挂起。
11
12>  **说明:**
13>
14> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15
16
17## 导入模块
18
19```ts
20import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
21```
22
23## backgroundTaskManager.requestSuspendDelay
24
25requestSuspendDelay(reason: string, callback: Callback&lt;void&gt;): DelaySuspendInfo
26
27申请短时任务。
28
29>  **说明:**
30>
31> 短时任务的申请和使用过程中的约束与限制请参考[指南](../../task-management/transient-task.md#约束与限制)。
32
33**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
34
35**参数**:
36
37| 参数名      | 类型                   | 必填   | 说明                             |
38| -------- | -------------------- | ---- | ------------------------------ |
39| reason   | string               | 是    | 申请短时任务的原因。                     |
40| callback | Callback&lt;void&gt; | 是    | 短时任务即将超时的回调函数,一般在超时前6秒,通过此回调通知应用。 |
41
42**返回值**:
43
44| 类型                                    | 说明        |
45| ------------------------------------- | --------- |
46| [DelaySuspendInfo](#delaysuspendinfo) | 返回短时任务信息。 |
47
48**错误码**:
49
50以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
51
52| 错误码ID   | 错误信息 |
53| --------- | ------- |
54| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types. |
55| 9800001 | Memory operation failed. |
56| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
57| 9800003 | Internal transaction failed. |
58| 9800004 | System service operation failed. |
59| 9900001 | Caller information verification failed for a transient task. |
60| 9900002 | Transient task verification failed. |
61
62**示例**:
63
64```ts
65import { BusinessError } from '@kit.BasicServicesKit';
66import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
67
68let myReason = 'test requestSuspendDelay';
69try {
70    let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => {
71    // 回调函数。应用申请的短时任务即将超时,通过此函数回调应用,执行一些清理和标注工作,并取消短时任务
72    // 此处回调与应用的业务功能不耦合,短时任务申请成功后,正常执行应用本身的业务
73        console.info("Request suspension delay will time out.");
74    })
75    let id = delayInfo.requestId;
76    let time = delayInfo.actualDelayTime;
77    console.info("The requestId is: " + id);
78    console.info("The actualDelayTime is: " + time);
79} catch (error) {
80    console.error(`requestSuspendDelay failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
81}
82```
83
84
85## backgroundTaskManager.getRemainingDelayTime
86
87getRemainingDelayTime(requestId: number, callback: AsyncCallback&lt;number&gt;): void
88
89获取本次短时任务的剩余时间,使用callback异步回调。
90
91**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
92
93**参数**:
94
95| 参数名       | 类型                          | 必填   | 说明                                       |
96| --------- | --------------------------- | ---- | ---------------------------------------- |
97| requestId | number                      | 是    | 短时任务的请求ID。通过申请短时任务[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)接口获取。  |
98| callback  | AsyncCallback&lt;number&gt; | 是    | 回调函数,返回本次短时任务的剩余时间,单位:ms。 |
99
100**错误码**:
101
102以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
103
104| 错误码ID   | 错误信息 |
105| --------- | ------- |
106| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
107| 9800001 | Memory operation failed. |
108| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
109| 9800003 | Internal transaction failed. |
110| 9800004 | System service operation failed. |
111| 9900001 | Caller information verification failed for a transient task. |
112| 9900002 | Transient task verification failed. |
113
114
115**示例**:
116
117```ts
118import { BusinessError } from '@kit.BasicServicesKit';
119import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
120
121let id = 1;
122backgroundTaskManager.getRemainingDelayTime(id, (error: BusinessError, res: number) => {
123    if(error) {
124        console.error(`callback => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
125    } else {
126        console.log('callback => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
127    }
128})
129```
130
131
132## backgroundTaskManager.getRemainingDelayTime
133
134getRemainingDelayTime(requestId: number): Promise&lt;number&gt;
135
136获取本次短时任务的剩余时间,使用promise异步回调。
137
138**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
139
140**参数**:
141
142| 参数名       | 类型     | 必填   | 说明         |
143| --------- | ------ | ---- | ---------- |
144| requestId | number | 是    | 短时任务的请求ID。通过申请短时任务[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)接口获取。 |
145
146**返回值**:
147
148| 类型                    | 说明                                       |
149| --------------------- | ---------------------------------------- |
150| Promise&lt;number&gt; | Promise对象,返回本次短时任务的剩余时间,单位:ms。 |
151
152**错误码**:
153
154以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
155
156| 错误码ID   | 错误信息 |
157| --------- | ------- |
158| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
159| 9800001 | Memory operation failed. |
160| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
161| 9800003 | Internal transaction failed. |
162| 9800004 | System service operation failed. |
163| 9900001 | Caller information verification failed for a transient task. |
164| 9900002 | Transient task verification failed. |
165
166**示例**:
167
168```ts
169import { BusinessError } from '@kit.BasicServicesKit';
170import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
171
172let id = 1;
173backgroundTaskManager.getRemainingDelayTime(id).then((res: number) => {
174    console.log('promise => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
175}).catch((error: BusinessError) => {
176    console.error(`promise => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
177})
178```
179
180
181## backgroundTaskManager.cancelSuspendDelay
182
183cancelSuspendDelay(requestId: number): void
184
185取消短时任务。
186
187**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
188
189**参数**:
190
191| 参数名       | 类型     | 必填   | 说明         |
192| --------- | ------ | ---- | ---------- |
193| requestId | number | 是    | 短时任务的请求ID。通过申请短时任务[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)接口获取。 |
194
195**错误码**:
196
197以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
198
199| 错误码ID   | 错误信息 |
200| --------- | ------- |
201| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
202| 9800001 | Memory operation failed. |
203| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
204| 9800003 | Internal transaction failed. |
205| 9800004 | System service operation failed. |
206| 9900001 | Caller information verification failed for a transient task. |
207| 9900002 | Transient task verification failed. |
208
209**示例**:
210
211  ```js
212  import { BusinessError } from '@kit.BasicServicesKit';
213  import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
214
215  let id = 1;
216  try {
217    backgroundTaskManager.cancelSuspendDelay(id);
218  } catch (error) {
219    console.error(`cancelSuspendDelay failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
220  }
221  ```
222
223## backgroundTaskManager.getTransientTaskInfo<sup>20+</sup>
224
225getTransientTaskInfo(): Promise&lt;TransientTaskInfo&gt;
226
227获取所有短时任务信息,如当日剩余总配额等,使用Promise异步回调。
228
229**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
230
231**返回值**:
232
233| 类型                                      | 说明          |
234|-----------------------------------------|-------------|
235|  Promise&lt;[TransientTaskInfo](#transienttaskinfo20)&gt; | Promise对象,返回所有短时任务信息。 |
236
237**错误码**:
238
239以下错误码的详细介绍请参见[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
240
241| 错误码ID   | 错误信息 |
242| --------- | ------- |
243| 9900001 | Caller information verification failed for a transient task. |
244| 9900003 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
245| 9900004 | System service operation failed. |
246
247**示例**:
248
249```ts
250import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
251import { BusinessError } from '@kit.BasicServicesKit';
252
253try {
254    backgroundTaskManager.getTransientTaskInfo().then((res: backgroundTaskManager.TransientTaskInfo) => {
255        console.info(`Operation getTransientTaskInfo succeeded. data: ` + JSON.stringify(res));
256    }).catch((error : BusinessError) => {
257        console.error(`Operation getTransientTaskInfo failed. code is ${error.code} message is ${error.message}`);
258    });
259} catch (error) {
260    console.error(`Operation getTransientTaskInfo failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
261}
262```
263
264## backgroundTaskManager.startBackgroundRunning
265
266startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent, callback: AsyncCallback&lt;void&gt;): void
267
268申请长时任务,支持申请一种类型,使用callback异步回调。长时任务申请成功后,会有通知栏消息,没有提示音。
269
270**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
271
272**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
273
274**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
275
276**参数**:
277
278| 参数名       | 类型                                 | 必填   | 说明                                       |
279| --------- | ---------------------------------- | ---- | ---------------------------------------- |
280| 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)。 |
281| bgMode    | [BackgroundMode](#backgroundmode) | 是    | 长时任务类型。                           |
282| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是    | 通知参数,用于指定点击长时任务通知后跳转的界面。           |
283| callback  | AsyncCallback&lt;void&gt;          | 是    | 回调函数,申请长时任务成功时,err为undefined,否则为错误对象。    |
284
285**错误码**:
286
287以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
288
289| 错误码ID  | 错误信息             |
290| ---- | --------------------- |
291| 201 | Permission denied. |
292| 202 | Not System App. |
293| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
294| 9800001 | Memory operation failed. |
295| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
296| 9800003 | Internal transaction failed. |
297| 9800004 | System service operation failed. |
298| 9800005 | Continuous task verification failed. |
299| 9800006 | Notification verification failed for a continuous task. |
300| 9800007 | Continuous task storage failed. |
301
302**示例**:
303
304```js
305import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
306import { BusinessError } from '@kit.BasicServicesKit';
307import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
308import { wantAgent, WantAgent } from '@kit.AbilityKit';
309// 在原子化服务中,请删除WantAgent导入
310
311function callback(error: BusinessError, data: void) {
312    if (error) {
313        console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
314    } else {
315        console.info("Operation startBackgroundRunning succeeded");
316    }
317}
318
319export default class EntryAbility extends UIAbility {
320    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
321        let wantAgentInfo: wantAgent.WantAgentInfo = {
322            // 点击通知后,将要执行的动作列表
323            wants: [
324                {
325                    bundleName: "com.example.myapplication",
326                    abilityName: "EntryAbility"
327                }
328            ],
329            // 点击通知后,动作类型
330            actionType: wantAgent.OperationType.START_ABILITY,
331            // 使用者自定义的一个私有值
332            requestCode: 0,
333            // 点击通知后,动作执行属性
334            wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
335        };
336
337        try {
338            // 通过wantAgent模块下getWantAgent方法获取WantAgent对象
339            // 在原子化服务中,请使用wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: object) => {替换下面一行代码
340            wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {
341                try {
342                    backgroundTaskManager.startBackgroundRunning(this.context,
343                        backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK, wantAgentObj, callback)
344                } catch (error) {
345                    console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
346                }
347            });
348        } catch (error) {
349            console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
350        }
351    }
352};
353```
354
355## backgroundTaskManager.startBackgroundRunning
356
357startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent): Promise&lt;void&gt;
358
359申请长时任务,支持申请一种类型,使用promise异步回调。长时任务申请成功后,会有通知栏消息,没有提示音。
360
361**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
362
363**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
364
365**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
366
367**参数**:
368
369| 参数名       | 类型                                 | 必填   | 说明                                       |
370| --------- | ---------------------------------- | ---- | ---------------------------------------- |
371| 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)。 |
372| bgMode    | [BackgroundMode](#backgroundmode) | 是    | 长时任务类型。                          |
373| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是    | 通知参数,用于指定点击长时任务通知后跳转的界面。                 |
374
375**返回值**:
376
377| 类型             | 说明               |
378| -------------- | ---------------- |
379| Promise\<void> | 无返回结果的Promise对象。 |
380
381**错误码**:
382
383以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
384
385| 错误码ID  | 错误信息             |
386| ---- | --------------------- |
387| 201 | Permission denied. |
388| 202 | Not System App. |
389| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
390| 9800001 | Memory operation failed. |
391| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
392| 9800003 | Internal transaction failed. |
393| 9800004 | System service operation failed. |
394| 9800005 | Continuous task verification failed. |
395| 9800006 | Notification verification failed for a continuous task. |
396| 9800007 | Continuous task storage failed. |
397
398**示例**:
399
400```js
401import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
402import { BusinessError } from '@kit.BasicServicesKit';
403import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
404import { wantAgent, WantAgent } from '@kit.AbilityKit';
405// 在原子化服务中,请删除WantAgent导入
406
407export default class EntryAbility extends UIAbility {
408    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
409        let wantAgentInfo: wantAgent.WantAgentInfo = {
410            // 点击通知后,将要执行的动作列表
411            wants: [
412                {
413                    bundleName: "com.example.myapplication",
414                    abilityName: "EntryAbility"
415                }
416            ],
417            // 点击通知后,动作类型
418            actionType: wantAgent.OperationType.START_ABILITY,
419            // 使用者自定义的一个私有值
420            requestCode: 0,
421            // 点击通知后,动作执行属性
422            wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
423        };
424
425        try {
426            // 通过wantAgent模块下getWantAgent方法获取WantAgent对象
427            // 在原子化服务中,请使用wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: object) => {替换下面一行代码
428            wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {
429                try {
430                    backgroundTaskManager.startBackgroundRunning(this.context,
431                        backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK, wantAgentObj).then(() => {
432                        console.info("Operation startBackgroundRunning succeeded");
433                    }).catch((error: BusinessError) => {
434                        console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
435                    });
436                } catch (error) {
437                    console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
438                }
439            });
440        } catch (error) {
441            console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
442        }
443    }
444};
445```
446
447## backgroundTaskManager.stopBackgroundRunning
448
449stopBackgroundRunning(context: Context, callback: AsyncCallback&lt;void&gt;): void
450
451取消长时任务,使用callback异步回调。
452
453**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
454
455**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
456
457**参数**:
458
459| 参数名      | 类型                        | 必填   | 说明                                       |
460| -------- | ------------------------- | ---- | ---------------------------------------- |
461| 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)。 |
462| callback | AsyncCallback&lt;void&gt; | 是    | 回调函数,取消长时任务成功时,err为undefined,否则为错误对象。|
463
464**错误码**:
465
466以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
467
468| 错误码ID  | 错误信息             |
469| ---- | --------------------- |
470| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
471| 9800001 | Memory operation failed. |
472| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
473| 9800003 | Internal transaction failed. |
474| 9800004 | System service operation failed. |
475| 9800005 | Continuous task verification failed. |
476| 9800006 | Notification verification failed for a continuous task. |
477| 9800007 | Continuous task storage failed. |
478
479**示例**:
480
481```js
482import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
483import { BusinessError } from '@kit.BasicServicesKit';
484import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
485
486function callback(error: BusinessError, data: void) {
487    if (error) {
488        console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
489    } else {
490        console.info("Operation stopBackgroundRunning succeeded");
491    }
492}
493
494export default class EntryAbility extends UIAbility {
495    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
496        try {
497            backgroundTaskManager.stopBackgroundRunning(this.context, callback);
498        } catch (error) {
499            console.error(`Operation stopBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
500        }
501    }
502};
503```
504
505## backgroundTaskManager.stopBackgroundRunning
506
507stopBackgroundRunning(context: Context): Promise&lt;void&gt;
508
509取消长时任务,使用promise异步回调。
510
511**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
512
513**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
514
515**参数**:
516
517| 参数名     | 类型      | 必填   | 说明                                       |
518| ------- | ------- | ---- | ---------------------------------------- |
519| 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)。 |
520
521**返回值**:
522
523| 类型             | 说明               |
524| -------------- | ---------------- |
525| Promise\<void> | 无返回结果的Promise对象。 |
526
527**错误码**:
528
529以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
530
531| 错误码ID  | 错误信息             |
532| ---- | --------------------- |
533| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. |
534| 9800001 | Memory operation failed. |
535| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
536| 9800003 | Internal transaction failed. |
537| 9800004 | System service operation failed. |
538| 9800005 | Continuous task verification failed. |
539| 9800006 | Notification verification failed for a continuous task. |
540| 9800007 | Continuous task storage failed. |
541
542**示例**:
543
544```js
545import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
546import { BusinessError } from '@kit.BasicServicesKit';
547import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
548
549export default class EntryAbility extends UIAbility {
550    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
551        try {
552            backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
553                console.info("Operation stopBackgroundRunning succeeded");
554            }).catch((error: BusinessError) => {
555                console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
556            });
557        } catch (error) {
558            console.error(`Operation stopBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
559        }
560    }
561};
562```
563
564## backgroundTaskManager.startBackgroundRunning<sup>12+</sup>
565
566startBackgroundRunning(context: Context, bgModes: string[], wantAgent: WantAgent): Promise&lt;ContinuousTaskNotification&gt;
567
568申请长时任务,支持申请多种类型,使用promise异步回调。长时任务申请成功后,会有通知栏消息,没有提示音。
569
570**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
571
572**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
573
574**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
575
576**参数**:
577
578| 参数名       | 类型                                 | 必填   | 说明                                       |
579| --------- | ---------------------------------- | ---- | ---------------------------------------- |
580| context   | [Context](../apis-ability-kit/js-apis-inner-application-context.md)                            | 是    | 应用运行的上下文。 |
581| bgModes    | string[] | 是    | 长时任务类型,取值范围请参考长时任务类型中的[配置项](../../task-management/continuous-task.md#使用场景)。<br> **说明:** 支持传入一个或多个类型。|
582| wantAgent | [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) | 是    | 通知参数,用于指定点击长时任务通知后跳转的界面。                 |
583
584**返回值**:
585
586| 类型             | 说明               |
587| -------------- | ---------------- |
588| Promise\<ContinuousTaskNotification> | Promise对象,返回[ContinuousTaskNotification](#continuoustasknotification12)类型对象。 |
589
590**错误码**:
591
592以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
593
594| 错误码ID  | 错误信息             |
595| ---- | --------------------- |
596| 201 | Permission denied. |
597| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
598| 9800001 | Memory operation failed. |
599| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
600| 9800003 | Internal transaction failed. |
601| 9800004 | System service operation failed. |
602| 9800005 | Continuous task verification failed. |
603| 9800006 | Notification verification failed for a continuous task. |
604| 9800007 | Continuous task storage failed. |
605
606**示例**:
607
608```js
609import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
610import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
611import { BusinessError } from '@kit.BasicServicesKit';
612import { notificationManager } from '@kit.NotificationKit';
613import { wantAgent, WantAgent } from '@kit.AbilityKit';
614// 在原子化服务中,请删除WantAgent导入
615
616export default class EntryAbility extends UIAbility {
617  id: number = 0; // 保存通知id
618
619  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
620    let wantAgentInfo: wantAgent.WantAgentInfo = {
621      // 点击通知后,将要执行的动作列表
622      wants: [
623        {
624          bundleName: "com.example.myapplication",
625          abilityName: "EntryAbility"
626        }
627      ],
628      // 点击通知后,动作类型
629      actionType: wantAgent.OperationType.START_ABILITY,
630      // 使用者自定义的一个私有值
631      requestCode: 0,
632      // 点击通知后,动作执行属性
633      wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
634    };
635
636    try {
637      // 通过wantAgent模块下getWantAgent方法获取WantAgent对象
638      // 在原子化服务中,请使用wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: object) => {替换下面一行代码
639      wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {
640        try {
641          let list: Array<string> = ["dataTransfer"];
642          // 在原子化服务中,let list: Array<string> = ["audioPlayback"];
643          backgroundTaskManager.startBackgroundRunning(this.context, list, wantAgentObj).then((res: backgroundTaskManager.ContinuousTaskNotification) => {
644            console.info("Operation startBackgroundRunning succeeded");
645            // 对于上传下载类的长时任务,应用可以使用res中返回的notificationId来更新通知,比如发送带进度条的模板通知
646            this.id = res.notificationId;
647          }).catch((error: BusinessError) => {
648            console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
649          });
650        } catch (error) {
651          console.error(`Operation startBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
652        }
653      });
654    } catch (error) {
655      console.error(`Operation getWantAgent failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
656    }
657  }
658
659  // 应用更新进度
660  updateProcess(process: number) {
661    // 应用定义下载类通知模版
662    let downLoadTemplate: notificationManager.NotificationTemplate = {
663      name: 'downloadTemplate', // 当前只支持downloadTemplate,保持不变
664      data: {
665        title: '文件下载:music.mp4', // 必填
666        fileName: 'senTemplate', // 必填
667        progressValue: process, // 应用更新进度值,自定义
668      }
669    };
670    let request: notificationManager.NotificationRequest = {
671      content: {
672        // 系统实况类型,保持不变
673        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_SYSTEM_LIVE_VIEW,
674        systemLiveView: {
675          typeCode: 8, // 上传下载类型需要填写 8,当前仅支持此类型。保持不变
676          title: "test", // 应用自定义
677          text: "test", // 应用自定义
678        }
679      },
680      id: this.id, // 必须是申请长时任务返回的id,否则应用更新通知失败
681      notificationSlotType: notificationManager.SlotType.LIVE_VIEW, // 实况窗类型,保持不变
682      template: downLoadTemplate // 应用需要设置的模版名称
683    };
684
685    try {
686      notificationManager.publish(request).then(() => {
687        console.info("publish success, id= " + this.id);
688      }).catch((err: BusinessError) => {
689        console.error(`publish fail: ${JSON.stringify(err)}`);
690      });
691    } catch (err) {
692      console.error(`publish fail: ${JSON.stringify(err)}`);
693    }
694  }
695};
696```
697
698## backgroundTaskManager.updateBackgroundRunning<sup>12+</sup>
699
700updateBackgroundRunning(context: Context, bgModes: string[]): Promise&lt;ContinuousTaskNotification&gt;
701
702更新长时任务类型,使用promise异步回调。长时任务更新成功后,会有通知栏消息,没有提示音。
703
704**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
705
706**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
707
708**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
709
710**参数**:
711
712| 参数名       | 类型                                 | 必填   | 说明                                       |
713| --------- | ---------------------------------- | ---- | ---------------------------------------- |
714| context   | [Context](../apis-ability-kit/js-apis-inner-application-context.md)                            | 是    | 应用运行的上下文。 |
715| bgModes    | string[] | 是    | 更新后的长时任务类型,取值范围请参考长时任务类型中的[配置项](../../task-management/continuous-task.md#使用场景)。<br> **说明:** 支持传入一个或多个类型。|
716
717**返回值**:
718
719| 类型             | 说明               |
720| -------------- | ---------------- |
721| Promise\<ContinuousTaskNotification> | Promise对象,返回[ContinuousTaskNotification](#continuoustasknotification12)类型对象。 |
722
723**错误码**:
724
725以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
726
727| 错误码ID  | 错误信息             |
728| ---- | --------------------- |
729| 201 | Permission denied. |
730| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameters types; 3. Parameter verification failed. |
731| 9800001 | Memory operation failed. |
732| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
733| 9800003 | Internal transaction failed. |
734| 9800004 | System service operation failed. |
735| 9800005 | Continuous task verification failed. |
736| 9800006 | Notification verification failed for a continuous task. |
737| 9800007 | Continuous task storage failed. |
738
739**示例**:
740
741```js
742import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
743import { BusinessError } from '@kit.BasicServicesKit';
744import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
745
746export default class EntryAbility extends UIAbility {
747    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
748        try {
749            // 必须先执行startBackgroundRunning,才能调用updateBackgroundRunning,这里假设已经申请过
750            let list: Array<string> = ["audioPlayback"];
751            backgroundTaskManager.updateBackgroundRunning(this.context, list).then(() => {
752                console.info("Operation updateBackgroundRunning succeeded");
753            }).catch((error: BusinessError) => {
754                console.error(`Operation updateBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
755            });
756        } catch (error) {
757            console.error(`Operation updateBackgroundRunning failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
758        }
759    }
760};
761```
762
763## backgroundTaskManager.getAllContinuousTasks<sup>20+</sup>
764
765getAllContinuousTasks(context: Context): Promise&lt;ContinuousTaskInfo[]&gt;
766
767获取所有长时任务信息,如长时任务Id、长时任务类型等,使用Promise异步回调。
768
769**需要权限**: ohos.permission.KEEP_BACKGROUND_RUNNING
770
771**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
772
773**参数**:
774
775| 参数名       | 类型                                 | 必填   | 说明                                       |
776| --------- | ---------------------------------- | ---- | ---------------------------------------- |
777| context   | [Context](../apis-ability-kit/js-apis-inner-application-context.md)                            | 是    | 应用运行的上下文。 |
778
779**返回值**:
780
781| 类型                                            | 说明          |
782|-----------------------------------------------|-------------|
783|  Promise&lt;[ContinuousTaskInfo](#continuoustaskinfo20)[]&gt; | Promise对象,返回所有长时任务信息。 |
784
785**错误码**:
786
787以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
788
789| 错误码ID   | 错误信息 |
790| --------- | ------- |
791| 201 | Permission denied. |
792| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
793| 9800004 | System service operation failed. |
794| 9800005 | Continuous task verification failed. |
795
796**示例**:
797
798```ts
799import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
800import { BusinessError } from '@kit.BasicServicesKit';
801import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
802
803export default class EntryAbility extends UIAbility {
804    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
805        try {
806            // 如果当前没有申请长时任务,则获取到一个空数组
807            backgroundTaskManager.getAllContinuousTasks(this.context).then((res: backgroundTaskManager.ContinuousTaskInfo[]) => {
808                console.info(`Operation getAllContinuousTasks succeeded. data: ` + JSON.stringify(res));
809            }).catch((error: BusinessError) => {
810                console.error(`Operation getAllContinuousTasks failed. code is ${error.code} message is ${error.message}`);
811            });
812        } catch (error) {
813            console.error(`Operation getAllContinuousTasks failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
814        }
815    }
816};
817```
818
819## backgroundTaskManager.getAllContinuousTasks<sup>20+</sup>
820
821getAllContinuousTasks(context: Context, includeSuspended: boolean): Promise&lt;ContinuousTaskInfo[]&gt;
822
823获取所有长时任务信息,如长时任务Id、长时任务类型等。可选择是否获取暂停的长时任务信息,使用Promise异步回调。
824
825**需要权限**: ohos.permission.KEEP_BACKGROUND_RUNNING
826
827**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
828
829**参数**:
830
831| 参数名       | 类型                                 | 必填   | 说明                                       |
832| --------- | ---------------------------------- | ---- | ---------------------------------------- |
833| context   | [Context](../apis-ability-kit/js-apis-inner-application-context.md)                            | 是    | 应用运行的上下文。 |
834| includeSuspended   | boolean                            | 是    | 是否获取暂停的长时任务信息, true表示获取, false表示不获取。 |
835
836**返回值**:
837
838| 类型                                            | 说明          |
839|-----------------------------------------------|-------------|
840|  Promise&lt;[ContinuousTaskInfo](#continuoustaskinfo20)[]&gt; | Promise对象,返回所有长时任务信息。 |
841
842**错误码**:
843
844以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
845
846| 错误码ID   | 错误信息 |
847| --------- | ------- |
848| 201 | Permission denied. |
849| 9800002 | Failed to write data into parcel. Possible reasons: 1. Invalid parameters; 2. Failed to apply for memory. |
850| 9800004 | System service operation failed. |
851| 9800005 | Continuous task verification failed. |
852
853**示例**:
854
855```ts
856import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
857import { BusinessError } from '@kit.BasicServicesKit';
858import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
859
860export default class EntryAbility extends UIAbility {
861    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
862        try {
863            // 如果当前没有申请长时任务,则获取到一个空数组
864            backgroundTaskManager.getAllContinuousTasks(this.context, false).then((res: backgroundTaskManager.ContinuousTaskInfo[]) => {
865                console.info(`Operation getAllContinuousTasks succeeded. data: ` + JSON.stringify(res));
866            }).catch((error: BusinessError) => {
867                console.error(`Operation getAllContinuousTasks failed. code is ${error.code} message is ${error.message}`);
868            });
869        } catch (error) {
870            console.error(`Operation getAllContinuousTasks failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
871        }
872    }
873};
874```
875
876## backgroundTaskManager.on('continuousTaskCancel')<sup>15+</sup>
877
878on(type: 'continuousTaskCancel', callback: Callback&lt;ContinuousTaskCancelInfo&gt;): void
879
880注册长时任务取消的监听,使用callback异步回调。
881
882**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
883
884**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
885
886**参数**:
887
888| 参数名       | 类型                                 | 必填   | 说明                                       |
889| --------- | ---------------------------------- | ---- | ---------------------------------------- |
890| type   | string                            | 是    | 取消长时任务,固定取值为'continuousTaskCancel'。 |
891| callback   | Callback\<[ContinuousTaskCancelInfo](#continuoustaskcancelinfo15)>       | 是    | 回调函数,返回长时任务取消原因等信息。 |
892
893**错误码**:
894
895以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
896
897| 错误码ID  | 错误信息             |
898| ---- | --------------------- |
899| 201 | Permission denied. |
900| 401 | Parameter error. Possible cause: 1. Callback parameter error; 2. Register a exist callback type; 3. Parameter verification failed. |
901
902**示例**:
903
904```js
905import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
906import { BusinessError } from '@kit.BasicServicesKit';
907import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
908
909function callback(info: backgroundTaskManager.ContinuousTaskCancelInfo) {
910  console.info('continuousTaskCancel callback id ' + info.id);
911  console.info('continuousTaskCancel callback reason ' + info.reason);
912}
913
914export default class EntryAbility extends UIAbility {
915    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
916        try {
917            backgroundTaskManager.on("continuousTaskCancel", callback);
918        } catch (error) {
919            console.error(`Operation onContinuousTaskCancel failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
920        }
921    }
922};
923```
924## backgroundTaskManager.off('continuousTaskCancel')<sup>15+</sup>
925
926off(type: 'continuousTaskCancel', callback?: Callback&lt;ContinuousTaskCancelInfo&gt;): void
927
928解除长时任务取消的监听,使用callback异步回调。
929
930**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
931
932**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
933
934**参数**:
935
936| 参数名       | 类型                                 | 必填   | 说明                                       |
937| --------- | ---------------------------------- | ---- | ---------------------------------------- |
938| type   | string                            | 是    | 取消长时任务,固定取值为'continuousTaskCancel'。 |
939| callback   | Callback\<[ContinuousTaskCancelInfo](#continuoustaskcancelinfo15)>       | 否    | 需要取消监听的回调函数,未传入则取消所有注册回调。 |
940
941**错误码**:
942
943以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
944
945| 错误码ID  | 错误信息             |
946| ---- | --------------------- |
947| 201 | Permission denied. |
948| 401 | Parameter error. Possible cause: 1. Callback parameter error; 2. Unregister type has not register; 3. Parameter verification failed. |
949
950**示例**:
951
952```js
953import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
954import { BusinessError } from '@kit.BasicServicesKit';
955import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
956
957function callback(info: backgroundTaskManager.ContinuousTaskCancelInfo) {
958  console.info('continuousTaskCancel callback id ' + info.id);
959  console.info('continuousTaskCancel callback reason ' + info.reason);
960}
961
962export default class EntryAbility extends UIAbility {
963    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
964        try {
965            backgroundTaskManager.off("continuousTaskCancel", callback);
966        } catch (error) {
967            console.error(`Operation onContinuousTaskCancel failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
968        }
969    }
970};
971```
972## backgroundTaskManager.on('continuousTaskSuspend')<sup>20+</sup>
973
974on(type: 'continuousTaskSuspend', callback: Callback&lt;ContinuousTaskSuspendInfo&gt;): void
975
976注册长时任务暂停的监听,使用callback异步回调。注册该回调后,如果系统首次检测到应用未执行相应的业务,不会直接取消长时任务,而是将长时任务标记为暂停状态,如果连续检测失败,仍会取消长时任务。<br>长时任务处于暂停状态时,应用退后台会被挂起,回前台自动激活。
977
978**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
979
980**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
981
982**参数**:
983
984| 参数名       | 类型                                 | 必填   | 说明                                       |
985| --------- | ---------------------------------- | ---- | ---------------------------------------- |
986| type   | string                            | 是    | 事件回调类型,固定取值为'continuousTaskSuspend',表示长时任务暂停。 |
987| callback   | Callback\<[ContinuousTaskSuspendInfo](#continuoustasksuspendinfo20)>       | 是    | 回调函数,返回长时任务暂停原因等信息。 |
988
989**错误码**:
990
991以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
992
993| 错误码ID  | 错误信息             |
994| ---- | --------------------- |
995| 201 | Permission denied. |
996| 9800005 | Continuous task verification failed. |
997
998**示例**:
999
1000
1001```js
1002import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
1003import { BusinessError } from '@kit.BasicServicesKit';
1004import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
1005
1006function callback(info: backgroundTaskManager.ContinuousTaskSuspendInfo) {
1007  console.info('continuousTaskSuspend callback continuousTaskId: ' + info.continuousTaskId);
1008  console.info('continuousTaskSuspend callback suspendState: ' + info.suspendState);
1009  console.info('continuousTaskSuspend callback suspendReason: ' + info.suspendReason);
1010}
1011
1012export default class EntryAbility extends UIAbility {
1013    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1014        try {
1015            backgroundTaskManager.on("continuousTaskSuspend", callback);
1016        } catch (error) {
1017            console.error(`Operation onContinuousTaskSuspend failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
1018        }
1019    }
1020};
1021```
1022## backgroundTaskManager.off('continuousTaskSuspend')<sup>20+</sup>
1023
1024off(type: 'continuousTaskSuspend', callback?: Callback&lt;ContinuousTaskSuspendInfo&gt;): void
1025
1026取消长时任务暂停的监听,使用callback异步回调。
1027
1028**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
1029
1030**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1031
1032**参数**:
1033
1034| 参数名       | 类型                                 | 必填   | 说明                                       |
1035| --------- | ---------------------------------- | ---- | ---------------------------------------- |
1036| type   | string                            | 是    | 事件回调类型,固定取值为'continuousTaskSuspend',表示长时任务暂停。 |
1037| callback   | Callback\<[ContinuousTaskSuspendInfo](#continuoustasksuspendinfo20)>       | 否    | 需要取消监听的回调函数,未传入则取消所有注册的暂停回调。 |
1038
1039**错误码**:
1040
1041以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
1042
1043| 错误码ID  | 错误信息             |
1044| ---- | --------------------- |
1045| 201 | Permission denied. |
1046| 9800005 | Continuous task verification failed. |
1047
1048**示例**:
1049
1050```js
1051import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
1052import { BusinessError } from '@kit.BasicServicesKit';
1053import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
1054
1055function callback(info: backgroundTaskManager.ContinuousTaskSuspendInfo) {
1056  console.info('continuousTaskSuspend callback continuousTaskId: ' + info.continuousTaskId);
1057  console.info('continuousTaskSuspend callback suspendState: ' + info.suspendState);
1058  console.info('continuousTaskSuspend callback suspendReason: ' + info.suspendReason);
1059}
1060
1061export default class EntryAbility extends UIAbility {
1062    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1063        try {
1064            backgroundTaskManager.off("continuousTaskSuspend", callback);
1065        } catch (error) {
1066            console.error(`Operation offContinuousTaskSuspend failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
1067        }
1068    }
1069};
1070```
1071## backgroundTaskManager.on('continuousTaskActive')<sup>20+</sup>
1072
1073on(type: 'continuousTaskActive', callback: Callback&lt;ContinuousTaskActiveInfo&gt;): void
1074
1075注册长时任务激活的监听,使用callback异步回调。应用回前台激活暂停的长时任务。
1076
1077**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
1078
1079**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1080
1081**参数**:
1082
1083| 参数名       | 类型                                 | 必填   | 说明                                       |
1084| --------- | ---------------------------------- | ---- | ---------------------------------------- |
1085| type   | string                            | 是    | 事件回调类型,固定取值为'continuousTaskActive',表示长时任务激活。 |
1086| callback   | Callback\<[ContinuousTaskActiveInfo](#continuoustaskactiveinfo20)>       | 是    | 回调函数,返回长时任务激活相关信息。 |
1087
1088**错误码**:
1089
1090以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
1091
1092| 错误码ID  | 错误信息             |
1093| ---- | --------------------- |
1094| 201 | Permission denied. |
1095| 9800005 | Continuous task verification failed. |
1096
1097**示例**:
1098
1099```js
1100import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
1101import { BusinessError } from '@kit.BasicServicesKit';
1102import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
1103
1104function callback(info: backgroundTaskManager.ContinuousTaskActiveInfo) {
1105  console.info('continuousTaskActive callback id: ' + info.id);
1106}
1107
1108export default class EntryAbility extends UIAbility {
1109    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1110        try {
1111            backgroundTaskManager.on("continuousTaskActive", callback);
1112        } catch (error) {
1113            console.error(`Operation onContinuousTaskActive failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
1114        }
1115    }
1116};
1117```
1118## backgroundTaskManager.off('continuousTaskActive')<sup>20+</sup>
1119
1120off(type: 'continuousTaskActive', callback?: Callback&lt;ContinuousTaskActiveInfo&gt;): void
1121
1122取消长时任务激活的监听,使用callback异步回调。
1123
1124**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
1125
1126**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1127
1128**参数**:
1129
1130| 参数名       | 类型                                 | 必填   | 说明                                       |
1131| --------- | ---------------------------------- | ---- | ---------------------------------------- |
1132| type   | string                            | 是    | 事件回调类型,固定取值为'continuousTaskActive',表示长时任务激活。 |
1133| callback   | Callback\<[ContinuousTaskActiveInfo](#continuoustaskactiveinfo20)>       | 否    | 需要取消监听的回调函数,未传入则取消所有注册的激活回调。 |
1134
1135**错误码**:
1136
1137以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[backgroundTaskManager错误码](errorcode-backgroundTaskMgr.md)。
1138
1139| 错误码ID  | 错误信息             |
1140| ---- | --------------------- |
1141| 201 | Permission denied. |
1142| 9800005 | Continuous task verification failed. |
1143
1144**示例**:
1145
1146```js
1147import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
1148import { BusinessError } from '@kit.BasicServicesKit';
1149import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
1150
1151function callback(info: backgroundTaskManager.ContinuousTaskActiveInfo) {
1152  console.info('continuousTaskActive callback id: ' + info.id);
1153}
1154
1155export default class EntryAbility extends UIAbility {
1156    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1157        try {
1158            backgroundTaskManager.off("continuousTaskActive", callback);
1159        } catch (error) {
1160            console.error(`Operation offContinuousTaskActive failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
1161        }
1162    }
1163};
1164```
1165
1166## DelaySuspendInfo
1167
1168短时任务信息。
1169
1170**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
1171
1172| 名称             | 类型     | 只读   | 可选   | 说明                                       |
1173| --------------- | ------ | ---- | ---- | ---------------------------------------- |
1174| requestId       | number | 否    | 否    | 短时任务的请求ID。                               |
1175| actualDelayTime | number | 否    | 否    | 应用实际申请的短时任务时间,单位:ms。<br/> **说明** :申请时间最长为3分钟,[低电量](../apis-basic-services-kit/js-apis-battery-info.md)时最长为1分钟。 |
1176
1177## TransientTaskInfo<sup>20+</sup>
1178
1179所有短时任务信息。
1180
1181**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
1182
1183| 名称             | 类型                                      | 只读   | 可选   | 说明              |
1184| --------------- |-----------------------------------------| ---- | ---- |-----------------|
1185| remainingQuota       | number                                  | 否    | 否    | 应用当日所剩余总配额,单位:ms。     |
1186| transientTasks | [DelaySuspendInfo](#delaysuspendinfo)[] | 否    | 否    | 当前已申请的所有短时任务信息。 |
1187
1188## BackgroundMode
1189
1190长时任务类型。
1191
1192**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1193
1194| 名称                     | 值  | 说明                    |
1195| ----------------------- | ---- | --------------------- |
1196| DATA_TRANSFER           | 1    | 数据传输。                  |
1197| AUDIO_PLAYBACK          | 2    | 音视频播放。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                  |
1198| AUDIO_RECORDING         | 3    | 录制。                    |
1199| LOCATION                | 4    | 定位导航。                  |
1200| BLUETOOTH_INTERACTION   | 5    | 蓝牙相关业务。                  |
1201| MULTI_DEVICE_CONNECTION | 6    | 多设备互联。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。                 |
1202| VOIP<sup>13+</sup> | 8    | 音视频通话。                 |
1203| TASK_KEEPING            | 9    | 计算任务(仅对2in1设备开放)。        |
1204
1205## ContinuousTaskNotification<sup>12+</sup>
1206
1207长时任务通知信息。
1208
1209**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1210
1211| 名称             | 类型     | 只读     | 可选   | 说明                                       |
1212| --------------- | ------ | ---- | ---- | ---------------------------------------- |
1213| slotType       | [notificationManager.SlotType](../apis-notification-kit/js-apis-notificationManager.md#slottype) | 否    | 否    | 长时任务通知的渠道类型。<br/>**说明:** 长时任务申请或更新成功后不支持提示音。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
1214| contentType | [notificationManager.ContentType](../apis-notification-kit/js-apis-notificationManager.md#contenttype) | 否    | 否    | 长时任务通知的内容类型。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
1215| notificationId | number | 否    | 否    | 长时任务通知 Id。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
1216| continuousTaskId<sup>15+</sup> | number | 否    | 是    | 长时任务 Id。|
1217
1218## ContinuousTaskCancelInfo<sup>15+</sup>
1219
1220长时任务取消信息。
1221
1222**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1223
1224| 名称             | 类型     | 只读   | 可选   | 说明                                       |
1225| --------------- | ------ | ---- | ---- | ---------------------------------------- |
1226| reason | [ContinuousTaskCancelReason](#continuoustaskcancelreason15) | 否    | 否    | 长时任务取消原因。|
1227| id | number | 否    | 否    | 被取消的长时任务 Id。|
1228
1229## ContinuousTaskCancelReason<sup>15+</sup>
1230
1231长时任务取消原因。
1232
1233**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1234
1235| 名称                     | 值  | 说明                    |
1236| ----------------------- | ---- | --------------------- |
1237| USER_CANCEL             | 1    | 用户取消。                  |
1238| SYSTEM_CANCEL           | 2    | 系统取消。                  |
1239| USER_CANCEL_REMOVE_NOTIFICATION         | 3    | 用户移除通知。预留接口,暂未启用。                    |
1240| SYSTEM_CANCEL_DATA_TRANSFER_LOW_SPEED                | 4    | 申请DATA_TRANSFER类型长时任务,但是数据传输速率低。预留接口,暂未启用。                  |
1241| SYSTEM_CANCEL_AUDIO_PLAYBACK_NOT_USE_AVSESSION   | 5    | 申请AUDIO_PLAYBACK类型长时任务,但是未接入[AVSession](../../media/avsession/avsession-overview.md)。预留接口,暂未启用。                  |
1242| SYSTEM_CANCEL_AUDIO_PLAYBACK_NOT_RUNNING | 6    | 申请AUDIO_PLAYBACK类型长时任务,但是未播放音视频。预留接口,暂未启用。                 |
1243| SYSTEM_CANCEL_AUDIO_RECORDING_NOT_RUNNING | 7    | 申请AUDIO_RECORDING类型长时任务,但是未录制。预留接口,暂未启用。                 |
1244| SYSTEM_CANCEL_NOT_USE_LOCATION            | 8    | 申请LOCATION类型长时任务,但是未使用定位导航。预留接口,暂未启用。        |
1245| SYSTEM_CANCEL_NOT_USE_BLUETOOTH            | 9    | 申请BLUETOOTH_INTERACTION类型长时任务,但是未使用蓝牙相关业务。预留接口,暂未启用。        |
1246| SYSTEM_CANCEL_NOT_USE_MULTI_DEVICE            | 10    | 申请MULTI_DEVICE_CONNECTION类型长时任务,但是未使用多设备互联。预留接口,暂未启用。        |
1247| SYSTEM_CANCEL_USE_ILLEGALLY            | 11    | 使用非法类型的长时任务,如申请AUDIO_PLAYBACK类型长时任务,但是使用音视频播放及定位导航业务。预留接口,暂未启用。        |
1248
1249## BackgroundSubMode<sup>16+</sup>
1250
1251长时任务子类型。
1252
1253**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1254
1255| 名称                     | 值  | 说明                    |
1256| ----------------------- | ---- | --------------------- |
1257| CAR_KEY           | 1    | 车钥匙。<br/>**说明:** 只有申请BLUETOOTH_INTERACTION类型的长时任务,车钥匙子类型才能生效。                  |
1258
1259## BackgroundModeType<sup>16+</sup>
1260
1261长时任务类型类别。
1262
1263**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1264
1265| 名称                     | 值  | 说明                    |
1266| ----------------------- | ---- | --------------------- |
1267| SUB_MODE           | 'subMode'    | 子类型。                  |
1268
1269## ContinuousTaskSuspendInfo<sup>20+</sup>
1270
1271长时任务暂停信息。
1272
1273**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1274
1275| 名称             | 类型     | 只读   | 可选   | 说明                                       |
1276| --------------- | ------ | ---- | ---- | ---------------------------------------- |
1277| continuousTaskId | number | 否    | 否    | 被暂停的长时任务 Id。|
1278| suspendState | boolean | 否    | 否    | 长时任务状态,false表示激活,true表示暂停。|
1279| suspendReason | [ContinuousTaskSuspendReason](#continuoustasksuspendreason20) | 否    | 否    | 长时任务暂停原因。|
1280
1281## ContinuousTaskSuspendReason<sup>20+</sup>
1282
1283长时任务暂停原因。
1284
1285**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1286
1287| 名称                     | 值  | 说明                    |
1288| ----------------------- | ---- | --------------------- |
1289| SYSTEM_SUSPEND_DATA_TRANSFER_LOW_SPEED     | 4    | 申请DATA_TRANSFER类型长时任务,但是数据传输速率低。                 |
1290| SYSTEM_SUSPEND_AUDIO_PLAYBACK_NOT_USE_AVSESSION   | 5    | 申请AUDIO_PLAYBACK类型长时任务,但是未接入[AVSession](../../media/avsession/avsession-overview.md)。                  |
1291| SYSTEM_SUSPEND_AUDIO_PLAYBACK_NOT_RUNNING  | 6    | 申请AUDIO_PLAYBACK类型长时任务,但是未播放音视频。  |
1292| SYSTEM_SUSPEND_AUDIO_RECORDING_NOT_RUNNING | 7    | 申请AUDIO_RECORDING类型长时任务,但是未录制。  |
1293| SYSTEM_SUSPEND_LOCATION_NOT_USED           | 8    | 申请LOCATION类型长时任务,但是未使用定位导航。 |
1294| SYSTEM_SUSPEND_BLUETOOTH_NOT_USED          | 9    | 申请BLUETOOTH_INTERACTION类型长时任务,但是未使用蓝牙相关业务。 |
1295| SYSTEM_SUSPEND_MULTI_DEVICE_NOT_USED       | 10   | 申请MULTI_DEVICE_CONNECTION类型长时任务,但是未使用多设备互联。  |
1296| SYSTEM_SUSPEND_USED_ILLEGALLY              | 11    | 使用非法类型的长时任务,如申请AUDIO_PLAYBACK类型长时任务,但是使用音视频播放及定位导航业务。预留接口,暂未启用。        |
1297| SYSTEM_SUSPEND_SYSTEM_LOAD_WARNING         | 12    | 系统高负载暂停长时任务。预留接口,暂未启用。        |
1298
1299## ContinuousTaskActiveInfo<sup>20+</sup>
1300
1301长时任务激活信息。
1302
1303**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1304
1305| 名称             | 类型     | 只读   | 可选   | 说明                                       |
1306| --------------- | ------ | ---- | ---- | ---------------------------------------- |
1307| id | number | 否    | 否    | 被激活的长时任务 Id。|
1308
1309## ContinuousTaskInfo<sup>20+</sup>
1310
1311长时任务信息。
1312
1313**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
1314
1315| 名称          | 类型       | 只读   | 可选   | 说明                    |
1316|-------------|----------| ---- | ---- |-----------------------|
1317| abilityName | string   | 否    | 否    | UIAbility名称。          |
1318| uid         | number   | 否    | 否    | 应用的UID。               |
1319| pid         | number   | 否    | 否    | 应用进程的PID。               |
1320| isFromWebView | boolean  | 否    | 否    | 是否通过Webview方式申请,即通过系统代理应用申请长时任务。      |
1321| [backgroundModes](#backgroundmode) | string[] | 否    | 否    | 长时任务类型。               |
1322| [backgroundSubModes](#backgroundsubmode16) | string[] | 否    | 否    | 长时任务子类型。              |
1323| notificationId | number   | 否    | 否    | 通知 Id。                |
1324| continuousTaskId | number   | 否    | 否    | 长时任务Id。              |
1325| abilityId | number   | 否    | 否    | UIAbility Id。         |
1326| wantAgentBundleName | string   | 否    | 否    |  [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) 配置的包名。WantAgent为通知参数,用于指定点击长时任务通知后跳转的界面,在申请长时任务时作为参数传入。        |
1327| wantAgentAbilityName | string   | 否    | 否    |  [WantAgent](../apis-ability-kit/js-apis-app-ability-wantAgent.md) 配置的ability名称。WantAgent为通知参数,用于指定点击长时任务通知后跳转的界面,在申请长时任务时作为参数传入。 |
1328| suspendState | boolean   | 否    | 否    | 申请的长时任务是否处于暂停状态。 |