diff --git a/zh-cn/application-dev/reference/apis/figures/zh_cn_image_ExtensionContext_Example.png b/zh-cn/application-dev/reference/apis/figures/zh_cn_image_ExtensionContext_Example.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9b32c04d4667dc0aafab3123a0c77e3dd1da0e Binary files /dev/null and b/zh-cn/application-dev/reference/apis/figures/zh_cn_image_ExtensionContext_Example.png differ diff --git a/zh-cn/application-dev/reference/apis/js-apis-ability-context.md b/zh-cn/application-dev/reference/apis/js-apis-ability-context.md index 8674ffeb9f72848b6c613ee44cc6abd0b694761b..ac2c0c00973b7e74c82a319c4503489c8b652b8a 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-ability-context.md +++ b/zh-cn/application-dev/reference/apis/js-apis-ability-context.md @@ -2,12 +2,12 @@ AbilityContext是Ability的上下文环境,继承自Context。 -AbilityContext模块提供允许访问特定于ability的资源的能力,包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。 +AbilityContext模块提供允许访问特定Ability的资源的能力,包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。 > **说明:** > -> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> 本模块接口仅可在Stage模型下使用。 +> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> - 本模块接口仅可在Stage模型下使用。 ## 使用说明 diff --git a/zh-cn/application-dev/reference/apis/js-apis-extension-context.md b/zh-cn/application-dev/reference/apis/js-apis-extension-context.md index 4be9d179fcea470a893c93043075a138a8760193..3f688e184d722fcd91abc834f7fc9fcceac674c4 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-extension-context.md +++ b/zh-cn/application-dev/reference/apis/js-apis-extension-context.md @@ -2,12 +2,12 @@ ExtensionContext是Extension的上下文环境,继承自Context。 -ExtensionContext模块提供扩展的上下文的能力,包括允许访问特定于扩展的资源。 +ExtensionContext模块提供访问特定Extension的资源的能力,对于拓展的Extension,可直接将ExtensionContext作为上下文环境,或者定义一个继承自ExtensionContext的类型作为上下文环境。如:ServiceExtension提供了ServiceExtensionContext,它在ExtensionContext的基础上扩展了启动、停止、绑定、解绑Ability的能力,详见[ServiceExtensionContext](js-apis-service-extension-context.md)。 > **说明:** > -> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> 本模块接口仅可在Stage模型下使用。 +> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> - 本模块接口仅可在Stage模型下使用。 ## 属性 @@ -15,8 +15,98 @@ ExtensionContext模块提供扩展的上下文的能力,包括允许访问特 | 名称 | 参数类型 | 可读 | 可写 | 说明 | | -------- | -------- | -------- | -------- | -------- | -| currentHapModuleInfo | HapModuleInfo | 是 | 否 | 当前Hap包的信息。 | -| config | Configuration | 是 | 否 | 模块的配置信息。 | -| extensionAbilityInfo | [ExtensionAbilityInfo](js-apis-bundle-ExtensionAbilityInfo.md) | 是 | 否 | 服务扩展信息。 | +| currentHapModuleInfo | HapModuleInfo | 是 | 否 | 所属Hap包的信息。
(详见SDK目录下的 `api\bundle\hapModuleInfo.d.ts`) | +| config | Configuration | 是 | 否 | 所属Module的配置信息。
(详见SDK目录下的 `api\@ohos.application.Configuration.d.ts`) | +| extensionAbilityInfo | [ExtensionAbilityInfo](js-apis-bundle-ExtensionAbilityInfo.md) | 是 | 否 | 所属Extension的信息。
(详见SDK目录下的 `api\bundle\extensionAbilityInfo.d.ts`) | +## 使用场景 +ExtensionContext主要用于查询所属Extension的信息、Module的配置信息以及Hap包的信息,开发者可根据自身业务需求使用对应的信息。此处以ServiceExtension为例,展示ExtensionContext的一种使用场景。 +**场景说明:** +一个应用为了适配不同性能的设备,提供了highPerformance、midPerformance、lowPerformance三个Module,这三个Module均提供了一个ServiceExtension给entry使用。安装应用时,应用市场会根据设备的性能,选择对应Module的Hap包与entry的Hap包进行打包安装,实际运行应用时,entry将解析ServiceExtensionContext.HapModuleInfo获取Hap包信息,根据不同的Hap包执行不同的业务逻辑。 +![Example](figures/zh_cn_image_ExtensionContext_Example.png) + +**示例:** + +三个Module内都定义一个相同名称的ServiceExtension: +``` js +import ServiceExtension from '@ohos.application.ServiceExtensionAbility' +import Want from '@ohos.application.Want'; +export default class TheServiceExtension extends ServiceExtension { + onCreate(want:Want) { + console.log('ServiceAbility onCreate, want: ' + want.abilityName); + // 通过globalThis传递ExtensionContext给entry + globalThis.ExtensionContext = this.context; + } + + onRequest(want, startId) { + console.log('ServiceAbility onRequest, want: ' + want.abilityName + ', startId: ' + startId); + } + + onConnect(want) { + console.log('ServiceAbility onConnect, want:' + want.abilityName); + return null; + } + + onDisconnect(want) { + console.log('ServiceAbility onDisconnect, want:' + want.abilityName); + } + + onDestroy() { + console.log('ServiceAbility onDestroy'); + } +} +``` + +在entry的MainAbility的onCreate回调内启动ServiceExtension +``` js +import Ability from '@ohos.application.Ability' +export default class MainAbility extends Ability { + onCreate(want, launchParam) { + console.log("[Demo] MainAbility onCreate"); + let wantExt = { + deviceId: "", + bundleName: "com.example.TheServiceExtension", + abilityName: "TheServiceExtension", + }; + this.context.startServiceExtensionAbility(wantExt); + } +}; +``` + +在entry内新建一个ServiceModule.ts,专用于执行业务逻辑 +``` js +export default class ServiceModel { + moduleName: string; + + constructor() {} + + executeTask() { + if (globalThis.ExtensionContext == undefined) { + console.log("ERROR, ServiceExtension does not exist"); + return; + } + + var moduleInfo = globalThis.ExtensionContext.currentHapModuleInfo; + this.moduleName = moduleInfo.name; + // 根据moduleName执行不同的业务逻辑,实现对不同性能设备的区分 + switch (this.moduleName) { + case "highPerformance": + console.log("This is high performance device."); + // 执行对应业务逻辑 + break; + case "midPerformance": + console.log("This is mid performance device."); + // 执行对应业务逻辑 + break; + case "lowPerformance": + console.log("This is low performance device."); + // 执行对应业务逻辑 + break; + default: + console.log("ERROR, invalid moduleName."); + break; + } + } +} +``` diff --git a/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md b/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md index bfc3ce97f1f0b8244d837aafd0ee4f53aca7797d..37d5bcf23cc85414837cd682251f7018124d8aac 100644 --- a/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md +++ b/zh-cn/application-dev/reference/apis/js-apis-service-extension-context.md @@ -6,8 +6,8 @@ ServiceExtensionContext模块提供ServiceExtensionAbility具有的能力和接 > **说明:** > -> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 -> 本模块接口仅可在Stage模型下使用。 +> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 +> - 本模块接口仅可在Stage模型下使用。 ## 使用说明