1e41f4b71Sopenharmony_ci# @ohos.app.ability.ActionExtensionAbility (自定义服务扩展能力) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciActionExtensionAbility是为开发者提供的自定义操作业务模板,继承自[UIExtensionAbility](js-apis-app-ability-uiExtensionAbility.md)。ActionExtension主要用于查看宿主应用中的内容以及对其进行对应处理。例如,添加一个书签、将选中的文本翻译成其他语言、在当前页面编辑图像等。各类Ability的继承关系详见[继承关系说明](./js-apis-app-ability-ability.md#ability的继承关系说明)。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8e41f4b71Sopenharmony_ci> 9e41f4b71Sopenharmony_ci> 本模块接口仅可在Stage模型下使用。 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci## 场景介绍 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci以翻译文本为例。首先需要创建请求发起方,再创建出ActionExtension,请求发起方需要将翻译的文本发送给ActionExtension,ActionExtension接收到文本后,需要将接收的文本进行翻译,翻译后的文本再发送给请求发起方。 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci## 导入模块 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci```ts 18e41f4b71Sopenharmony_ciimport { ActionExtensionAbility } from '@kit.AbilityKit'; 19e41f4b71Sopenharmony_ci``` 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci## 属性 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 必填 | 说明 | 26e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | -------- | 27e41f4b71Sopenharmony_ci| context | [UIExtensionContext](js-apis-inner-application-uiExtensionContext.md) | 否 | 否 | 上下文。 | 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci## ActionExtensionAbility.onCreate 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_cionCreate(): void 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ciActionExtensionAbility创建时回调,执行初始化业务逻辑操作。 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci**示例:** 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci## ActionExtensionAbility.onSessionCreate 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_cionSessionCreate(want: Want, session: UIExtensionContentSession): void 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci当ActionExtensionAbility界面内容对象创建后调用。 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci**参数:** 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 52e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 53e41f4b71Sopenharmony_ci| want | [Want](js-apis-app-ability-want.md) | 是 | 当前ActionExtensionAbility的Want类型信息,包括ability名称、bundle名称等。 | 54e41f4b71Sopenharmony_ci| session | [UIExtensionContentSession](js-apis-app-ability-uiExtensionContentSession.md) | 是 | ActionExtensionAbility界面内容相关信息。 | 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ci**示例:** 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci## ActionExtensionAbility.onForeground 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_cionForeground(): void 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ciActionExtensionAbility生命周期回调,当ActionExtensionAbility从后台转到前台时触发。 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci**示例:** 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci## ActionExtensionAbility.onBackground 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_cionBackground(): void 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ciActionExtensionAbility生命周期回调,当ActionExtensionAbility从前台转到后台时触发。 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci**示例:** 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci## ActionExtensionAbility.onSessionDestroy 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_cionSessionDestroy(session: UIExtensionContentSession): void 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci当ActionExtensionAbility界面内容对象销毁后调用。 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci**参数:** 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 95e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 96e41f4b71Sopenharmony_ci| session | [UIExtensionContentSession](js-apis-app-ability-uiExtensionContentSession.md) | 是 | ActionExtensionAbility界面内容相关信息。 | 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci**示例:** 99e41f4b71Sopenharmony_ci 100e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci## ActionExtensionAbility.onDestroy 103e41f4b71Sopenharmony_ci 104e41f4b71Sopenharmony_cionDestroy(): void | Promise<void> 105e41f4b71Sopenharmony_ci 106e41f4b71Sopenharmony_ciActionExtensionAbility生命周期回调,在ActionExtensionAbility销毁时回调,执行资源清理等操作。 107e41f4b71Sopenharmony_ci在执行完onDestroy生命周期回调后,应用可能会退出,从而可能导致onDestroy中的异步函数未能正确执行,比如异步写入数据库。可以使用异步生命周期,以确保异步onDestroy完成后再继续后续的生命周期。 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_ci**返回值:** 112e41f4b71Sopenharmony_ci 113e41f4b71Sopenharmony_ci| 类型 | 说明 | 114e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- | 115e41f4b71Sopenharmony_ci| void \| Promise<void> | 无返回结果或无返回结果的Promise对象。 | 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci**示例:** 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ci参见[创建ActionExtensionAbility](#创建actionextensionability)。 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci## 创建ActionExtensionAbility 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci在DevEco Studio工程中手动新建一个ActionExtensionAbility,具体步骤如下: 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为ActionExtAbility。 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci2. 在actionextability目录,右键选择“New > ArkTS File”,新建一个文件并命名为ActionExtAbility.ets。 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci ```text 130e41f4b71Sopenharmony_ci ├── ets 131e41f4b71Sopenharmony_ci │ ├── actionextability 132e41f4b71Sopenharmony_ci │ │ ├── ActionExtAbility.ets 133e41f4b71Sopenharmony_ci └ 134e41f4b71Sopenharmony_ci ``` 135e41f4b71Sopenharmony_ci 136e41f4b71Sopenharmony_ci3. ActionExtAbility.ets文件中,增加导入ActionExtensionAbility的依赖包,自定义类继承ActionExtensionAbility并实现生命周期回调。 137e41f4b71Sopenharmony_ci 138e41f4b71Sopenharmony_ci ```ts 139e41f4b71Sopenharmony_ci import { ActionExtensionAbility, Want, UIExtensionContentSession } from '@kit.AbilityKit'; 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci const TAG: string = "[ActionExtAbility]"; 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci export default class ActionExtAbility extends ActionExtensionAbility { 144e41f4b71Sopenharmony_ci onCreate() { 145e41f4b71Sopenharmony_ci console.info(TAG, `onCreate`); 146e41f4b71Sopenharmony_ci } 147e41f4b71Sopenharmony_ci onSessionCreate(want: Want, session: UIExtensionContentSession) { 148e41f4b71Sopenharmony_ci console.info(TAG, `onSessionCreate, want: ${want.abilityName}`); 149e41f4b71Sopenharmony_ci if (want.parameters) { 150e41f4b71Sopenharmony_ci let obj: Record<string, UIExtensionContentSession | object> = { 151e41f4b71Sopenharmony_ci 'session': session, 152e41f4b71Sopenharmony_ci 'messages': want.parameters.shareMessages 153e41f4b71Sopenharmony_ci }; 154e41f4b71Sopenharmony_ci let storage: LocalStorage = new LocalStorage(obj); 155e41f4b71Sopenharmony_ci session.loadContent('pages/Index', storage); 156e41f4b71Sopenharmony_ci } 157e41f4b71Sopenharmony_ci } 158e41f4b71Sopenharmony_ci onForeground() { 159e41f4b71Sopenharmony_ci console.info(TAG, `ononForeground`); 160e41f4b71Sopenharmony_ci } 161e41f4b71Sopenharmony_ci onBackground() { 162e41f4b71Sopenharmony_ci console.info(TAG, `onBackground`); 163e41f4b71Sopenharmony_ci } 164e41f4b71Sopenharmony_ci onSessionDestroy(session: UIExtensionContentSession) { 165e41f4b71Sopenharmony_ci console.info(TAG, `onSessionDestroy`); 166e41f4b71Sopenharmony_ci } 167e41f4b71Sopenharmony_ci onDestroy() { 168e41f4b71Sopenharmony_ci console.info(TAG, `onDestroy`); 169e41f4b71Sopenharmony_ci } 170e41f4b71Sopenharmony_ci } 171e41f4b71Sopenharmony_ci ``` 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci4. 在工程Module对应的[module.json5配置文件](../../quick-start/module-configuration-file.md)中注册ActionExtensionAbility,type标签需要设置为“action”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。 174e41f4b71Sopenharmony_ci 175e41f4b71Sopenharmony_ci ```json 176e41f4b71Sopenharmony_ci { 177e41f4b71Sopenharmony_ci "module": { 178e41f4b71Sopenharmony_ci ... 179e41f4b71Sopenharmony_ci "extensionAbilities": [ 180e41f4b71Sopenharmony_ci { 181e41f4b71Sopenharmony_ci "name": "ActionExtAbility", 182e41f4b71Sopenharmony_ci "icon": "$media:icon", 183e41f4b71Sopenharmony_ci "description": "action", 184e41f4b71Sopenharmony_ci "type": "action", 185e41f4b71Sopenharmony_ci "exported": true, 186e41f4b71Sopenharmony_ci "srcEntry": "./ets/actionextability/ActionExtAbility.ets" 187e41f4b71Sopenharmony_ci } 188e41f4b71Sopenharmony_ci ] 189e41f4b71Sopenharmony_ci } 190e41f4b71Sopenharmony_ci } 191e41f4b71Sopenharmony_ci ``` 192