IT评测·应用市场-qidao123.com
标题:
HarmonyOS NEXT应用开辟:Stage模型开辟-UIServiceExtension
[打印本页]
作者:
火影
时间:
2025-3-12 00:41
标题:
HarmonyOS NEXT应用开辟:Stage模型开辟-UIServiceExtension
往期鸿蒙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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4