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&lt;void&gt;          | 是    | 回调函数,申请长时任务成功时,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&lt;void&gt;
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&lt;void&gt;): 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&lt;void&gt; | 是    | 回调函数,取消长时任务成功时,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&lt;void&gt;
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&lt;ContinuousTaskNotification&gt;
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&lt;ContinuousTaskNotification&gt;
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。|