HarmonyOS NEXT应用开辟:Stage模型开辟-UIServiceExtension

火影  金牌会员 | 2025-3-12 00:41:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 979|帖子 979|积分 2937

 往期鸿蒙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启动后,其生命周期独立于客户端,纵然客户端已经销毁,该后台服务仍可继续运行,窗口创建失败或销毁后该服务会被销毁。
  1. import { common, Want } from '@kit.AbilityKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. @Entry
  4. @Component
  5. struct Index {
  6.   build() {
  7.     Column() {
  8.       Row() {
  9.         // 创建启动按钮
  10.         Button('start ability')
  11.           .enabled(true)
  12.           .onClick(() => {
  13.             let context = getContext(this) as common.UIAbilityContext;
  14.             let startWant: Want = {
  15.               bundleName: 'com.acts.uiserviceextensionability',
  16.               abilityName: 'UiServiceExtAbility',
  17.             };
  18.             try {
  19.               // 启动UIServiceExtensionAbility
  20.               context.startUIServiceExtensionAbility(startWant).then(() => {
  21.                 console.log('startUIServiceExtensionAbility success');
  22.               }).catch((error: BusinessError) => {
  23.                 console.log('startUIServiceExtensionAbility error', JSON.stringify(error));
  24.               })
  25.             } catch (err) {
  26.               console.log('startUIServiceExtensionAbility failed', JSON.stringify(err));
  27.             }
  28.           })
  29.       }
  30.     }
  31.   }
  32. }
复制代码
客户端毗连服务端

客户端通过connectUIServiceExtensionAbility()毗连服务端,获取并生存UIServiceProxy对象。通过该proxy对象的sendData()方法发送数据给服务端。服务端通过UIServiceExtensionAbility类onData()(系统接口)方法吸收客户端数据。
  1. import { common, Want } from '@kit.AbilityKit';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. @Entry
  4. @Component
  5. struct Index {
  6.   comProxy: common.UIServiceProxy | null = null;
  7.   connectCallback : common.UIServiceExtensionConnectCallback = {
  8.     onData:(data: Record<string, Object>) => {
  9.       console.log("received data", JSON.stringify(data));
  10.     },
  11.     onDisconnect:() => {
  12.       console.log("onDisconnect ");
  13.     }
  14.   }
  15.   build() {
  16.     Column() {
  17.       Row() {
  18.         // 创建连接按钮
  19.         Button("connect ability")
  20.           .enabled(true)
  21.           .onClick(() => {
  22.             let context = getContext(this) as common.UIAbilityContext;
  23.             let startWant:Want = {
  24.               bundleName: 'com.acts.uiserviceextensionability',
  25.               abilityName: 'UiServiceExtAbility',
  26.             };
  27.             try {
  28.             // 连接UIServiceExtensionAbility
  29.             context.connectUIServiceExtensionAbility(startWant, this.connectCallback).then((proxy: common.UIServiceProxy) => {
  30.                 this.comProxy = proxy;
  31.                 let formData: Record<string, string> = {
  32.                   'test': 'test'
  33.                 };
  34.                 try {
  35.                   this.comProxy.sendData(formData);
  36.                 } catch (err) {
  37.                   console.log('sendData failed', JSON.stringify(err));
  38.                 };
  39.               }).catch((err: BusinessError) => {
  40.                 console.log("connectUIServiceExtensionAbility failed", JSON.stringify(err));
  41.               });
  42.             } catch(err) {
  43.               console.log("connectUIServiceExtensionAbility failed", JSON.stringify(err));
  44.             };
  45.       })
  46.       }
  47.   }
  48. }
  49. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表