harmony 鸿蒙UIServiceExtension
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启动后,其生命周期独立于客户端,即使客户端已经销毁,该后台服务仍可继续运行,窗口创建失败或销毁后该服务会被销毁。
示例中的context的获取方式请参见获取UIAbility的上下文信息。
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 = this.getUIContext().getHostContext() as common.UIAbilityContext;
let startWant: Want = {
bundleName: 'com.acts.uiserviceextensionability',
abilityName: 'UiServiceExtAbility',
};
try {
// 启动UIServiceExtensionAbility
context.startUIServiceExtensionAbility(startWant).then(() => {
console.info('startUIServiceExtensionAbility success.');
}).catch((error: BusinessError) => {
console.error(`startUIServiceExtensionAbility failed, err code: ${error.code}, err msg: ${error.message}.`);
});
} catch (err) {
let code = (err as BusinessError).code;
let msg = (err as BusinessError).message;
console.error(`startUIServiceExtensionAbility failed, err code: ${code}, err msg: ${msg}.`);
}
})
}
}
}
}
客户端连接服务端
客户端通过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.info(`data received, data: ${JSON.stringify(data)}.`);
},
onDisconnect: () => {
console.info(`onDisconnect.`);
}
}
build() {
Column() {
Row() {
// 创建连接按钮
Button('connect ability')
.enabled(true)
.onClick(() => {
let context = this.getUIContext().getHostContext() 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) {
let code = (err as BusinessError).code;
let msg = (err as BusinessError).message;
console.error(`sendData failed, err code:${code}, err msg:${msg}.`);
}
});
.catch((err: BusinessError) => {
console.error(`connectUIServiceExtensionAbility failed, err code: ${err.code}, err msg: ${err.message}.`);
});
} catch (err) {
let code = (err as BusinessError).code;
let msg = (err as BusinessError).message;
console.error(`connectUIServiceExtensionAbility failed, err code:${code}, err msg:${msg}.`);
}
})
}
}
}
}
你可能感兴趣的鸿蒙文章
harmony 鸿蒙FA模型访问Stage模型DataShareExtensionAbility
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦