• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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