往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)
- 鸿蒙开辟核心知识点,看这篇文章就够了
- 最新版!鸿蒙HarmonyOS Next应用开辟实战学习路线
- 鸿蒙HarmonyOS NEXT开辟技能最全学习路线指南
- 鸿蒙应用开辟实战项目,看这一篇文章就够了(部分项目附源码)
UIServiceExtension
概述
UIServiceExtension是UIService范例的ExtensionAbility浮窗类组件,提供UI界面(比方预览界面)和后台服务本领。组件内部持有了一个UIServiceExtensionContext,通过UIServiceExtensionContext提供了丰富的接供词外部使用。
本文描述中称被启动的UIServiceExtension为服务端,称启动UIServiceExtension的组件为客户端。
应用可以通过启动和毗连两种形式使用UIServiceExtension:
- 通过UIExtensionContext调用startUIServiceExtensionAbility()方法启动UIServiceExtension。
- 通过UIAbilityContext、UIExtensionContext调用connectUIServiceExtensionAbility()方法毗连UIServiceExtension。
阐明
- 三方应用可以使用UIServiceExtension,不支持实现UIServiceExtension(需要系统权限)。
- 三方应用需要在前台获焦的情况下才能毗连系统提供的UIServiceExtension。
- UIServiceExtension的生命周期与绑定的窗口强关联,窗口销毁后UIServiceExtension也一起销毁。
启动UIServiceExtension
应用通过startUIServiceExtensionAbility()方法启动一个UIServiceExtension。UIServiceExtension启动后,其生命周期独立于客户端,纵然客户端已经销毁,该后台服务仍可继续运行,窗口创建失败或销毁后该服务会被销毁。
- import { common, Want } from '@kit.AbilityKit';
- import { BusinessError } from '@kit.BasicServicesKit';
- @Entry
- @Component
- struct Index {
- build() {
- Column() {
- Row() {
- // 创建启动按钮
- Button('start ability')
- .enabled(true)
- .onClick(() => {
- let context = getContext(this) as common.UIAbilityContext;
- let startWant: Want = {
- bundleName: 'com.acts.uiserviceextensionability',
- abilityName: 'UiServiceExtAbility',
- };
- try {
- // 启动UIServiceExtensionAbility
- context.startUIServiceExtensionAbility(startWant).then(() => {
- console.log('startUIServiceExtensionAbility success');
- }).catch((error: BusinessError) => {
- console.log('startUIServiceExtensionAbility error', JSON.stringify(error));
- })
- } catch (err) {
- console.log('startUIServiceExtensionAbility failed', JSON.stringify(err));
- }
- })
- }
- }
- }
- }
复制代码 客户端毗连服务端
客户端通过connectUIServiceExtensionAbility()毗连服务端,获取并生存UIServiceProxy对象。通过该proxy对象的sendData()方法发送数据给服务端。服务端通过UIServiceExtensionAbility类onData()(系统接口)方法吸收客户端数据。
- import { common, Want } from '@kit.AbilityKit';
- import { BusinessError } from '@kit.BasicServicesKit';
- @Entry
- @Component
- struct Index {
- comProxy: common.UIServiceProxy | null = null;
- connectCallback : common.UIServiceExtensionConnectCallback = {
- onData:(data: Record<string, Object>) => {
- console.log("received data", JSON.stringify(data));
- },
- onDisconnect:() => {
- console.log("onDisconnect ");
- }
- }
- build() {
- Column() {
- Row() {
- // 创建连接按钮
- Button("connect ability")
- .enabled(true)
- .onClick(() => {
- let context = getContext(this) as common.UIAbilityContext;
- let startWant:Want = {
- bundleName: 'com.acts.uiserviceextensionability',
- abilityName: 'UiServiceExtAbility',
- };
- try {
- // 连接UIServiceExtensionAbility
- context.connectUIServiceExtensionAbility(startWant, this.connectCallback).then((proxy: common.UIServiceProxy) => {
- this.comProxy = proxy;
- let formData: Record<string, string> = {
- 'test': 'test'
- };
- try {
- this.comProxy.sendData(formData);
- } catch (err) {
- console.log('sendData failed', JSON.stringify(err));
- };
- }).catch((err: BusinessError) => {
- console.log("connectUIServiceExtensionAbility failed", JSON.stringify(err));
- });
- } catch(err) {
- console.log("connectUIServiceExtensionAbility failed", JSON.stringify(err));
- };
- })
- }
- }
- }
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |