火影 发表于 2025-3-12 00:41:27

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));
            };
      })
      }
}
}
} https://i-blog.csdnimg.cn/direct/15ac2b59ab5c4731b627927d56a75698.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HarmonyOS NEXT应用开辟:Stage模型开辟-UIServiceExtension