1# @ohos.app.ability.InsightIntentEntryExecutor (@InsightIntentEntry的意图执行基类) 2 3本模块提供[@InsightIntentEntry](js-apis-app-ability-InsightIntentDecorator.md#insightintententry)装饰器的意图执行基类,必须与@InsightIntentEntry装饰器联合使用。 4 5开发者需要在继承该基类的子类中,实现[onExecute()](#onexecute)意图执行回调,并使用@InsightIntentEntry装饰器来装饰子类。 6 7> **说明:** 8> 9> 本模块首批接口从API version 20开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 10> 11> 本模块接口仅可在Stage模型下使用。 12 13## 导入模块 14 15```ts 16import { InsightIntentEntryExecutor } from '@kit.AbilityKit'; 17``` 18 19## InsightIntentEntryExecutor\<T> 20 21### 属性 22 23**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 24 25**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。 26 27| 名称 | 类型 | 只读 | 可选 | 说明 | 28| -------- | -------- | -------- | -------- | -------- | 29| executeMode | [insightIntent.ExecuteMode](./js-apis-app-ability-insightIntent.md#executemode) | 否 | 否 | 表示意图执行模式。即拉起绑定的Ability组件时支持的执行模式。 | 30| context | [InsightIntentContext](./js-apis-app-ability-insightIntentContext.md) | 否 | 否 | 表示意图执行上下文。 | 31| windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 否 | 是 | 表示windowStage实例对象,和[onWindowStageCreate](./js-apis-app-ability-uiAbility.md#onwindowstagecreate)接口的windowStage实例是同一个,可用于加载意图执行的页面。仅当executeMode字段取值为UI_ABILITY_FOREGROUND(即意图执行需要将UIAbility显示在前台时),该属性生效。 | 32| uiExtensionSession | [UIExtensionContentSession](./js-apis-app-ability-uiExtensionContentSession.md) | 否 | 是 | 表示UIExtensionContentSession实例对象,和[onSessionCreate](./js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)接口的UIExtensionContentSession实例是同一个,可用于加载意图执行的页面。仅当executeMode字段取值为UI_EXTENSION_ABILITY(即意图执行需要拉起UIExtensionAbility时),该属性生效。 | 33 34### onExecute 35 36onExecute(): Promise\<insightIntent.IntentResult\<T>> 37 38当AI入口触发意图执行时,系统将会拉起该类绑定的Ability组件,并触发该回调,开发者可以在该回调中实现需要执行的意图操作。使用Promise异步回调。 39 40该接口的调用时机与意图执行模式的对应关系如下: 41 42| 意图执行模式 | 接口调用时机和顺序 | 43| ----------- | -----------------| 44| [UI_ABILITY_FOREGROUND](./js-apis-app-ability-insightIntent.md#executemode)<br/>UIAbility前台模式 | - 若UIAbility冷启动,意图执行时UIAbility生命周期触发顺序:[onCreate](./js-apis-app-ability-uiAbility.md#oncreate)、[onWindowStageCreate](./js-apis-app-ability-uiAbility.md#onwindowstagecreate)、onExecute、[onForeground](./js-apis-app-ability-uiAbility.md#onforeground)。<br/>- 若UIAbility热启动,且启动时UIAbility处于后台,意图执行时UIAbility生命周期触发顺序:[onNewWant](./js-apis-app-ability-uiAbility.md#onnewwant)、onExecute、[onForeground](./js-apis-app-ability-uiAbility.md#onforeground)。<br/>- 若UIAbility热启动,且启动时UIAbility处于前台,意图执行时UIAbility生命周期触发顺序:onExecute。 | 45| [UI_ABILITY_BACKGROUND](./js-apis-app-ability-insightIntent.md#executemode)<br/>UIAbility后台模式 | - 若UIAbility冷启动,意图执行时UIAbility生命周期触发顺序:[onCreate](./js-apis-app-ability-uiAbility.md#oncreate)、onExecute、[onBackground](./js-apis-app-ability-uiAbility.md#onbackground)。<br/>- 若UIAbility热启动,意图执行时UIAbility生命周期触发顺序:onExecute。 | 46| [UI_EXTENSION_ABILITY](./js-apis-app-ability-insightIntent.md#executemode)<br />UIExtension模式 | 意图执行时UIExtensionAbility生命周期触发顺序:[onCreate](./js-apis-app-ability-uiExtensionAbility.md#oncreate)、[onSessionCreate](./js-apis-app-ability-uiExtensionAbility.md#onsessioncreate)、onExecute、[onForeground](./js-apis-app-ability-uiExtensionAbility.md#onforeground)。 | 47|<!--DelRow-->[SERVICE_EXTENSION_ABILITY](./js-apis-app-ability-insightIntent-sys.md)<br />ServiceExtension模式 | 意图执行时ServiceExtensionAbility生命周期触发顺序:[onCreate](./js-apis-app-ability-serviceExtensionAbility-sys.md#oncreate)、[onRequest](./js-apis-app-ability-serviceExtensionAbility-sys.md#onrequest)、onExecute。 | 48 49**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore 50 51**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。 52 53**返回值:** 54 55| 类型 | 说明 | 56|------|-----| 57| Promise\<insightIntent.IntentResult\<T>>| Promise对象。返回[insightIntent.IntentResult\<T>](js-apis-app-ability-insightIntent.md#intentresultt20)对象,表示意图执行结果。| 58 59**示例** 60 61```ts 62import { insightIntent, InsightIntentEntry, InsightIntentEntryExecutor } from '@kit.AbilityKit'; 63import { hilog } from '@kit.PerformanceAnalysisKit'; 64 65const LOG_TAG: string = 'testTag-EntryIntent'; 66 67// 使用@InsightIntentEntry装饰器定义意图 68@InsightIntentEntry({ 69 intentName: 'PlayMusic', 70 domain: 'MusicDomain', 71 intentVersion: '1.0.1', 72 displayName: '播放歌曲', 73 displayDescription: '播放音乐意图', 74 icon: $r('app.media.app_icon'), 75 llmDescription: '支持传递歌曲名称,播放音乐', 76 keywords: ['音乐播放', '播放歌曲', 'PlayMusic'], 77 abilityName: 'EntryAbility', 78 executeMode: [insightIntent.ExecuteMode.UI_ABILITY_FOREGROUND], 79 parameters: { 80 'schema': 'http://json-schema.org/draft-07/schema#', 81 'type': 'object', 82 'title': 'Song Schema', 83 'description': 'A schema for describing songs and their artists', 84 'properties': { 85 'songName': { 86 'type': 'string', 87 'description': 'The name of the song', 88 'minLength': 1 89 } 90 }, 91 'required': ['songName'] 92 } 93}) 94export default class PlayMusicDemo extends InsightIntentEntryExecutor<string> { 95 songName: string = ''; 96 97 onExecute(): Promise<insightIntent.IntentResult<string>> { 98 hilog.info(0x0000, LOG_TAG, 'PlayMusicDemo executeMode %{public}s', JSON.stringify(this.executeMode)); 99 hilog.info(0x0000, LOG_TAG, '%{public}s', JSON.stringify(this)); 100 let storage = new LocalStorage(); 101 storage.setOrCreate('songName', this.songName); 102 // 根据executeMode参数的不同情况,提供不同拉起PlayMusicPage页面的方式。 103 if (this.executeMode == insightIntent.ExecuteMode.UI_ABILITY_FOREGROUND) { 104 this.windowStage?.loadContent('pages/PlayMusicPage', storage); 105 } else if (this.executeMode == insightIntent.ExecuteMode.UI_EXTENSION_ABILITY) { 106 this.uiExtensionSession?.loadContent('pages/PlayMusicPage', storage); 107 } 108 // 定义意图的执行结果 109 let result: insightIntent.IntentResult<string> = { 110 code: 123, 111 result: 'result' 112 } 113 hilog.info(0x0000, LOG_TAG, 'PlayMusicDemo return %{public}s', JSON.stringify(result)); 114 // 以Promise的方式返回意图执行结果 115 return Promise.reject(result); 116 } 117} 118``` 119