• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 基础能力增强
2
3### 介绍
4
5本示例使用 [AbilityStartCallback](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-ability-kit/js-apis-inner-application-abilityStartCallback.md) , [UIExtensionContent](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-ability-kit/js-apis-inner-application-uiExtensionContext.md) , [UIExtensionContentSession](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-ability-kit/js-apis-app-ability-uiExtensionContentSession.md) 中的接口进行实现。
6
7### 效果预览
8
9|                      主页面                      |                     弹出状态Toast                     |            UIExtensionContentSession页面             |                   UIExtension启动页                    |
10| :----------------------------------------------: | :---------------------------------------------------: | :--------------------------------------------------: | :----------------------------------------------------: |
11| <img src="screenshots/index.jpeg" width="270" /> | <img src="screenshots/app_status.jpeg" width="270" /> | <img src="screenshots/sync_data.jpeg" width="270" /> | <img src="screenshots/uiextension.jpeg" width="270" /> |
12
13使用说明
14
15AbilityStartCallback对应接口
16
171.点击主页面**AbilityStartCallback开发示例**按钮,跳转到'AbilityStartCallback开发示例'界面;
18
192.点击**startAbilityByTyp onResult**按钮,拉起'选择音频'窗口,点击返回按钮,返回上级界面;
20
213.点击**startAbilityByType onError**按钮,弹出提示'startAbilityByType onError...'信息。
22
23
24
25UIExtensionContext对应接口
26
271.点击主页面**UIExtensionContext开发示例**按钮,跳转到'UIExtensionContext开发示例'界面;
28
292.点击**openLink**按钮,启动一个新的UIAbility,点击返回按钮,返回上级界面;
30
313.点击**启动UIExtensionAbility**按钮,启动一个新的UIExtensionAbility,在UIExtensionAbility界面上显示reportDrawnCompleted,terminateSelf callback,terminateSelf promise,terminateSelfWithResult callback,terminateSelfWithResult promise接口对应的按钮;
32
334.点击**reportDrawnCompleted**按钮,弹出提示'UIExtensionContent.reportDrawnCompleted succeed.'信息;
34
355.点击**terminateSelf callback**按钮,关闭UIExtensionAbility,显示'UIExtensionContext开发示例'界面;
36
376.点击**启动UIExtensionAbility**按钮,在UIExtensionAbility界面上点击**terminateSelf promise**按钮,关闭UIExtensionAbility,显示'UIExtensionContext开发示例'界面;
38
397.点击**启动UIExtensionAbility**按钮,在UIExtensionAbility界面上点击**terminateSelfWithResult callback**按钮,关闭UIExtensionAbility,显  示'UIExtensionContext开发示例'界面;
40
418.点击**启动UIExtensionAbility**按钮,在UIExtensionAbility界面上点击**terminateSelfWithResult promise**按钮,关闭UIExtensionAbility,显示'UIExtensionContext开发示例'界面。
42
43
44
45UIExtensionContentSession对应接口
46
471.点击主页面**UIExtensionContentSession开发示例**按钮,跳转到'UIExtensionContentSession开发示例'界面;
48
492.点击**启动UIExtensionAbility**按钮,启动一个新的UIExtensionAbility,在UIExtensionAbility界面上显示terminateSelfWithResult callback,terminateSelfWithResult promise,setWindowPrivacyMode callback,setWindowPrivacyMode promise,getUIExtensionWindowProxy接口对应的按钮;
50
513.点击**terminateSelfWithResult callback**按钮,关闭UIExtensionAbility,显示'UIExtensionContentSession开发示例'界面;
52
534.点击**terminateSelfWithResult promise**按钮,关闭UIExtensionAbility,显示'UIExtensionContentSession开发示例'界面;
54
555.点击**setWindowPrivacyMode callback**按钮,弹出提示'UIExtensionContentSession.setWindowPrivacyMode(callback)...'信息;
56
576.点击**setWindowPrivacyMode promise**按钮,弹出提示'UIExtensionContentSession.setWindowPrivacyMode(promise)...'信息;
58
597.点击**getUIExtensionWindowProxy**按钮,弹出提示'UIExtensionContentSession.getUIExtensionWindowProxy...'信息;
60
61### 工程目录
62
63```
64entry/src/main/ets/
65|---entryability
66|   |---EntryAbility.ets					// 首页的Ability
67|   |---OpenLinkUIAbility.ets				// UIAbility(用于验证新接口使用)
68|---pages
69|   |---Index.ets							// 首页
70|   |---OpenLinkIndex.ets					// 被启动的OpenLink接口的展示页
71|---uiextensionentry
72|   |---ContextUIExtensionAbility.ets		// UIExtensionAbility(用于验证新接口使用)
73|   |---SessionUIExtensionAbility.ets		// UIExtensionAbility(用于验证新接口使用)
74|---uiextensionpages
75|   |---AbilityStartCallback.ets			// AbilityStartCallback的接口的展示页
76|   |---UIExtensionContentSession.ets		// UIExtensionContentSession的接口的展示页
77|   |---UIExtensionContentSessionPage.ets	// SessionUIExtensionAbility加载的页面
78|   |---UIExtensionContext.ets				// UIExtensionContext的接口的展示页
79|   |---UIExtensionContextPage.ets			// ContextUIExtensionAbility加载的页面
80
81```
82
83### 具体实现
84
85* AbilityStartCallback对应接口实现,源码参考[AbilityStartCallback.ets](entry/src/main/ets/uiextensionpages/AbilityStartCallback.ets)
86
87  * onResult接口实现:通过调用startAbilityByType接口,'所有照片'窗口,关闭窗口回调触发onResult接口;
88  * onError接口实现:通过调用startAbilityByType接口,调用失败触发onError接口;
89
90* UIExtensionContext对应接口实现,源码参考[UIExtensionContext.ets](entry/src/main/ets/uiextensionpages/UIExtensionContext.ets)和[UIExtensionContextPage.ets](entry/src/main/ets/uiextensionpages/UIExtensionContextPage.ets)
91
92  * openLink接口实现:在被启动的UIAbility的module.json5中配置下列字段:
93
94    -"actions"列表中包含"ohos.want.action.viewData"
95
96    \- "entities"列表中包含"entity.system.browsable"
97
98    \- "uris"列表中包含"scheme"为"https"且"domainVerify"为true的元素
99
100    在调用端调用openLink接口,传入对应字段信息,可以拉起对应的UIAbility;
101
102  * reportDrawnCompleted接口实现:通过调用this.context.reportDrawnCompleted口开发者提供打点功能;
103
104  * terminateSelf(Promise)接口实现:通过调用this.context.terminateSelf()接口实现停止Ability自身功能;
105
106  * terminateSelf(Callback)接口实现:通过调用this.context.terminateSelf()接口实现停止Ability自身功能;
107
108  * terminateSelfWithResult(Promise)接口实现:通过调用this.context.terminateSelfWithResult()接口实现停止Ability自身,并将结果返回给调用者的功能;
109
110  * terminateSelfWithResult(Callback)接口实现:通过调用this.context.terminateSelfWithResult()接口实现停止Ability自身,并将结果返回给调用者的功能;
111
112* UIExtensionContentSession对应接口实现,源码参考[UIExtensionContentSession.ets](entry/src/main/ets/uiextensionpages/UIExtensionContentSession.ets)和[UIExtensionContentSessionPage.ets](entry/src/main/ets/uiextensionpages/UIExtensionContentSessionPage.ets)
113
114  * terminateSelfWithResult(Promise)接口实现:通过调用this.session.terminateSelfWithResult()接口,实现停止UIExtensionContentSession对应的窗口界面对象,并将结果返回给UIExtensionComponent控件的功能;
115  * terminateSelfWithResult(Callback)接口实现:通过调用this.session.terminateSelfWithResult()接口,实现停止UIExtensionContentSession对应的窗口界面对象,并将结果返回给UIExtensionComponent控件的功能;
116  * setWindowPrivacyMode(Promise)接口实现:通过调用this.session.setWindowPrivacyMode()接口,实现设置窗口是否为隐私模式功能;
117  * setWindowPrivacyMode(Callback)接口实现:通过调用this.session.setWindowPrivacyMode()接口,实现设置窗口是否为隐私模式功能;
118  * getUIExtensionWindowProxy接口实现:通过调用this.session.getUIExtensionWindowProxy()接口,实现获取UIExtension窗口代理功能;
119
120### 相关权限
121
122[ohos.permission.START_INVISIBLE_ABILITY](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md)
123
124[ohos.permission.PRIVACY_WINDOW](https://gitee.com/openharmony/docs/blob/eb73c9e9dcdd421131f33bb8ed6ddc030881d06f/zh-cn/application-dev/security/permission-list.md)
125
126### 依赖
127
128不涉及。
129
130### 约束与限制
131
1321.本示例仅支持标准系统上运行,支持设备:RK3568;
133
1342.本示例为Stage模型,支持API12版本SDK,版本号:5.0.0.31;
135
1363.本示例涉及使用系统接口:UIAbilityContext.requestModalUIExtensionUIAbilityContext.startAbilityByType
137需要手动替换Full SDK才能编译通过;
138
1394.本示例需要使用DevEco Studio NEXT Developer Beta1 (Build Version: 5.0.3.403, built on June 20, 2024)才可编译运行;
140
1415.本示例涉及[ohos.permission.START_INVISIBLE_ABILITY](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md)权限为 system_core级别,需要配置高权限签名。
142
143### 下载
144
145```shell
146git init
147git config core.sparsecheckout true
148echo code/SystemFeature/UIExtensionSamples > .git/info/sparse-checkout
149git remote add origin https://gitee.com/openharmony/applications_app_samples.git
150git pull origin master
151```
152
153