# WorkSchedulerExtensionContext (System API) The **WorkSchedulerExtensionContext** module, inherited from [ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md), provides a context environment for the WorkSchedulerExtensionAbility. This module provides APIs for accessing the resources of a WorkSchedulerExtensionAbility. > **NOTE** > > The initial APIs of this module are supported since API version 10. Newly added APIs will be marked with a superscript to indicate their earliest API version. > > The APIs of this module can be used only in the stage model. > > The APIs provided by this module are system APIs. ## How to Use The context is obtained through a WorkSchedulerExtensionAbility child class instance. ```ts import { WorkSchedulerExtensionAbility, workScheduler } from from '@kit.BackgroundTasksKit'; class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility { onWorkStart(workInfo: workScheduler.WorkInfo) { let WorkSchedulerExtensionContext = this.context; // Obtain the WorkSchedulerExtensionContext. } } ``` ## WorkSchedulerExtensionContext.startServiceExtensionAbility<sup>13+</sup> startServiceExtensionAbility(want: Want): Promise\<void> Starts a ServiceExtensionAbility. This API uses a promise to return the result. **System capability**: SystemCapability.ResourceSchedule.WorkScheduler **Parameters** | Parameter| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | Yes| Want information about the target ability.| **Returns** | Type| Description| | -------- | -------- | | Promise<void> | Promise that returns no value.| **Error codes** For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](../apis-ability-kit/errorcode-ability.md). | ID| Error Message| | ------- | -------- | | 201 | The application does not have permission to call the interface. | | 202 | The application is not system-app, can not use system-api. | | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | | 16000001 | The specified ability does not exist. | | 16000002 | Incorrect ability type. | | 16000004 | Can not start invisible component. | | 16000005 | The specified process does not have the permission. | | 16000006 | Cross-user operations are not allowed. | | 16000008 | The crowdtesting application expires. | | 16000011 | The context does not exist. | | 16000012 | The application is controlled. | | 16000013 | The application is controlled by EDM. | | 16000019 | Can not match any component. | | 16000050 | Internal error. | | 16200001 | The caller has been released. | **Example** ```ts import { WorkSchedulerExtensionAbility, workScheduler } from '@kit.BackgroundTasksKit'; import { Want } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; let want : Want = { bundleName: 'com.example.workscheduler', abilityName: 'ServiceExtAbility' } export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility { onWorkStart(workInfo: workScheduler.WorkInfo) { console.info(`onWorkStart, workInfo = ${JSON.stringify(workInfo)}`); // Start the corresponding service. this.context.startServiceExtensionAbility(want).then(() => { console.info('succeeded in starting ServiceExtensionAbility.'); }).catch ((err: BusinessError) => { console.error('failed to start ServiceExtensionAbility.'); }); } onWorkStop(workInfo: workScheduler.WorkInfo) { console.info(`onWorkStop, workInfo is ${JSON.stringify(workInfo)}`); } } ``` ## WorkSchedulerExtensionContext.stopServiceExtensionAbility<sup>13+</sup> stopServiceExtensionAbility(want: Want): Promise\<void> Stops a ServiceExtensionAbility. This API uses a promise to return the result. **System capability**: SystemCapability.ResourceSchedule.WorkScheduler **Parameters** | Parameter| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | Yes| Want information about the target ability.| **Returns** | Type| Description| | -------- | -------- | | Promise<void> | Promise that returns no value.| **Error codes** For details about the error codes, see [Universal Error Codes](../errorcode-universal.md) and [Ability Error Codes](../apis-ability-kit/errorcode-ability.md). | ID| Error Message| | ------- | -------- | | 201 | The application does not have permission to call the interface. | | 202 | The application is not system-app, can not use system-api. | | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | | 16000001 | The specified ability does not exist. | | 16000002 | Incorrect ability type. | | 16000004 | Can not start invisible component. | | 16000005 | The specified process does not have the permission. | | 16000006 | Cross-user operations are not allowed. | | 16000011 | The context does not exist. | | 16000050 | Internal error. | | 16200001 | The caller has been released. | **Example** ```ts import { WorkSchedulerExtensionAbility, workScheduler } from '@kit.BackgroundTasksKit'; import { Want } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; let want : Want = { bundleName: 'com.example.workscheduler', abilityName: 'ServiceExtAbility' } export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility { onWorkStart(workInfo: workScheduler.WorkInfo) { console.info(`onWorkStart, workInfo = ${JSON.stringify(workInfo)}`); } onWorkStop(workInfo: workScheduler.WorkInfo) { console.info(`onWorkStop, workInfo is ${JSON.stringify(workInfo)}`); // Stop the corresponding service. this.context.stopServiceExtensionAbility(want).then(() => { console.info('succeeded in stopping ServiceExtensionAbility.'); }).catch ((err: BusinessError) => { console.error('failed to stop ServiceExtensionAbility.'); }); } } ```