鸿蒙原生应用开发——分布式数据对象

HarmonyOS开发者社区 2023-12-08 14:09:05

 01、什么是分布式数据对象

在可信组网环境下,多个相互组网认证的设备将各自创建的对象加入同一个 sessionId,使得加入的多个数据对象之间可以同步数据,也就是说,当某一数据对象属性发生变更时,其他数据对象会检测到这一变更,同时将自身属性更新。此时,该 sessionId 下的所有数据对象属性相同,这样的数据对象称之为分布式数据对象。此外,分布式数据对象可以被动退出 sessionId,当分布式数据对象退出 sessionId 后,该对象将检测不到其他对象的变更。

02、分布式数据对象能力

1、  分布式数据对象创建

2、  分布式数据对象查询

3、  分布式数据对象修改

4、  分布式数据对象删除

5、  分布式数据对象保存

6、  分布式数据对象订阅(数据变更,上下线)

7、分布式数据对象加入、退出分布式组网

03、前提准备

 

1、  开发工具:DevEco Studio 3.1.0.501

2、API:9

3、  SDK 版本:3.2.12.5

 

04、创建一个新的项目

新建项目,选择 API9 版本,stage 模型。

 

 

05、权限申请

 

1、  使用到的权限

○ ohos.permission.DISTRIBUTED_DATASYNC

○ 允许不同设备间的数据交换

○ 权限级别:normal

○ 授权方式:user_grant

○ ACL 使能:TRUE

2、配置文件申明

首先,在项目的模块级目录下找到并打开 module.json5 文件,如下图:

 

 

在 module 下的对象里添加如下申明:

 

 

此时,配置文件中的权限申明就完成了,但是,此时我们还不能获得这些权限。由于 ohos.permission.DISTRIBUTED_DATASYNC 权限是 ACL 使能为 TRUE 的权限,需要在签名工具文件中说明一下。

如何找到对应的签名工具文件呢?我们在安装 DevEco Studio 的时候是下载好了 OpenHarmony 的 SDK 的,此时在 OpenHarmony 文件夹中,打开 “Sdk\OpenHarmony SDK 版本\toolchains\lib” 该路径,此时在 lib 文件夹中,咱们可以找到两个 json 文件,分别为 UnsgnedDebugProfileTemplate.json 和 UnsgnedReleasedProfileTemplate.json,点击并打开这两个文件,添加如下权限:

 

 

3、权限申请编码

在申请 ohos.permission.DISTRIBUTED_DATASYNC 权限时,其文档中将其标注为用户手动授权的权限,此时需要我们动态申请权限,在项目中,我们新建一个 ets 文件,我这里取名为 RequestPermission.ets。

首先,导入以下包:

 

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';import bundleManager from '@ohos.bundle.bundleManager';import common from '@ohos.app.ability.common';

获取访问控制模块对象实例:

 

let atManager = abilityAccessCtrl.createAtManager();

编写如下方法(这里使用的是异步函数):

export async function checkAccessTokenID(permission: Array<Permissions>) {
  // 获取应用程序的accessTokenID
  let tokenId: number;
  let grantStatus: Array<abilityAccessCtrl.GrantStatus> = []
  try {
    let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
    let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
    tokenId = appInfo.accessTokenId;
  } catch (err) {
    console.error(`getBundleInfoForSelf failed, code is ${err.code}, message is ${err.message}`);
  }
  // 校验应用是否被授予权限,若申请多个权限,建议循环检查多个权限
  for (let index = 0;index < permission.length; index++) {
    try {
      grantStatus.push(await atManager.checkAccessToken(tokenId, permission[index]))
    } catch (err) {
      console.error(`checkAccessToken failed, code is ${err.code}, message is ${err.message}`);
    }
  }
  return grantStatus;
}


export async function checkPermission(context: common.UIAbilityContext, permissions: Array<Permissions>) {
  let grantStatus: Array<abilityAccessCtrl.GrantStatus> = await checkAccessTokenID(permissions)
  for (let i = 0; i < grantStatus.length; i++) {
    if (grantStatus[i] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
      console.info(`${permissions[i].toString()} 已授权`)
    } else {
      //申请权限
      console.info('开始向用户申请权限')
      requestPermissionFromUser(context, permissions)
    }
  }
}
export async function requestPermissionFromUser(context: common.UIAbilityContext, permissions: Array<Permissions>) {
  // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    let grantStatus: Array<number> = data.authResults
    let length: number = grantStatus.length
    for (let i = 0;i < length; i++) {
      if (grantStatus[i] === 0) {
        // 用户授权,可以继续访问目标操作
        console.info(`${permissions[i].toString()} 权限申请成功`)
      } else {
        // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
        console.info(`${permissions[i].toString()} 权限申请被用户拒绝`)
      }
    }
    // 授权成功
  })
}

 

此时,我们申请权限的方法就算编写完成了,在应用入口,即 EntryAbility.ts 文件中的

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam)

方法中回调权限申请函数:

requestPermissionFromUser(this.context, PERMISSIONS)

其中,PERMISSIONS 定义如下:const PERMISSIONS:Array<Permissions>=['ohos.permission.DISTRIBUTED_DATASYNC']

到此,我们的权限申请就算完完全全完成啦,当用户第一次安装并打开应用的时候,应用会向用户通过弹窗形式申请权限,用户点击授权即可赋予应用相应的权限啦~

 

06、上手分布式数据对象代码开发

登录了同一华为帐号的 HarmonyOS 设备已经默认了进行了组网认证,所以在进行分布式数据对象开发之前无需再进行多设备组网认证这一阶段的开发,开发变得相对简单了起来。首先,咱们制作一个简易 UI 界面(UI 界面仅供参考),如下图所示:

 

 

 

相信对于有 HarmonyOS 开发经验的小伙伴们来说这样的 UI 界面制作并不困难,其中红色圆点、绿色圆点为设备状态,当设备状态发生改变如下线时,颜色变为红色,UI 界面代码如下:

import router from '@ohos.router'
import { DistributedDeviceManageFunc } from '../modules/DistributedDeviceManager/DistributedDeviceManagerFunctions'
import DistributedObjectFunc from '../modules/DistributedObject/DistributedObjectFunctions'
import { ContinuationDeviceManagerDialog } from '../view/ContinuationDeviceManagerDialog'
import { DistributedDeviceManagerDialog } from '../view/DistributedDeviceManagerDialog'


AppStorage.SetOrCreate('distributedDeviceList', [])
AppStorage.SetOrCreate('message', '分布式数据对象Demo测试')
AppStorage.SetOrCreate('statusColor', '#ff4fc100')
AppStorage.SetOrCreate('distributedColor', '#ffff0000')


@Entry
@Component
struct DistributedObjectDemo {
  @StorageLink('message') message: string = ''
  @StorageLink('statusColor') statusColor: string = ''
  @StorageLink('distributedColor') distributedColor: string = ''
  @StorageLink('distributedObj') distributedObj: DistributedObjectFunc = new DistributedObjectFunc()


  @Builder
  navigationTitle() {
    Row({ space: '10vp' }) {
      Button({ type: ButtonType.Normal }) {
        Image($rawfile('ic_public_back.svg'))
          .size({
            width: '24vp',
            height: '24vp'
          })
      }
      .width('36vp')
      .height('36vp')
      .backgroundColor(Color.White)
      .borderRadius('10vp')
      .onClick(() => {
        DistributedDeviceManageFunc.release()
        router.back()
      })


      Text('分布式数据对象测试')
        .fontWeight(FontWeight.Bold)
        .fontSize('20vp')
      Blank()
      Button({ type: ButtonType.Normal }) {
        Image($rawfile('ic_public_connection_filled.svg'))
          .size({
            width: '24vp',
            height: '24vp'
          })
      }
      .width('36vp')
      .height('36vp')
      .backgroundColor(Color.White)
      .borderRadius('10vp')
      .onClick(() => {
        this.distributedDeviceManagerDialogController.open()
      })
    }
    .padding('5vp')
    .width('90%')
  }


  build() {
    Navigation() {
      Column({ space: '20vp' }) {
        Row({ space: '20vp' }) {
          Text(`设备状态`)
            .fontSize('20vp')
            .fontWeight(FontWeight.Bold)
          Circle()
            .width('25vp')
            .height('25vp')
            .fill(this.statusColor)
        }


        Row({ space: '20vp' }) {
          Text(`对端设备状态`)
            .fontSize('20vp')
            .fontWeight(FontWeight.Bold)
          Circle()
            .width('25vp')
            .height('25vp')
            .fill(this.distributedColor)
        }


        Text(`SessionID:${this.distributedObj.getSessionId()}`)
          .fontSize('20vp')
          .fontWeight(FontWeight.Bold)
        Text(this.message)
          .fontSize('20vp')
          .fontWeight(FontWeight.Bold)
          .maxLines(2)
        Button('保存分布式数据对象')
          .buttonStyles()
          .onClick(() => {
            this.distributedObj.saveDistributedObject()
          })
        Button('修改分布式数据对象')
          .buttonStyles()
          .onClick(() => {
            this.distributedObj.updateDistributedObject()
          })
        Button('退出组网')
          .buttonStyles()
          .onClick(() => {
            this.distributedObj.exit()
            router.back()
          })
      }
      .width('100%')
    }
    .width('100%')
    .height('100%')
    .mode(NavigationMode.Auto)
    .titleMode(NavigationTitleMode.Mini)
    .hideBackButton(true)
    .title(this.navigationTitle())
  }
}


@Extend(Button) function buttonStyles() {
  .fontSize('20vp')
  .width('60%')
  .height('50vp')
}

 

现在,我们的页面制作就完成啦,下面开始重头戏——分布式数据对象开发流程

1、导入模块

import distributedObject from '@ohos.data.distributedDataObject'

2、初始化 distributedObject. DataObject 对象

定义一个 distributedObject. DataObject 类型的变量。

 

mDistributedObject: distributedObject.DataObject

调用 distributedObject. Create()函数创建一个 distributedObject. DataObject 对象,并将其返回给定义的变量 mDistributedObject。

 

this.mDistributedObject = distributedObject.create(globalThis.context, {  name: 'jack',  age: 18,  isVis: false})

在 create()方法中存在两个参数,context 和 resource,context 的类型为 Context,resource 类型为 object,在这里我是在 entryAbility.ts 文件下的 onWindowStageCreate()方法里面定义了一个全局变量 globalThis.context。

 

globalThis.context = this.context

3、设置组网 sessionId

 

this.mDistributedObject.setSessionId(this.mSessionId)

在 setSessionId()函数中,参数 sessionId 为 string 类型,表示分布式对象组网唯一标识符,设置同步的 sessionId,当可信组网中有多个设备时,多个设备间的对象如果设置为同一个 sessionId,就能自动同步。

4、开启设备状态监听

globalThis.statusCallback = (sessionId: string, networkId: string, status: string) => {
  AppStorage.Set('message', `组网设备状况变更,id:${sessionId} status:${status} networkId:${networkId}`)
  if (status == 'online') {
    AppStorage.Set('distributedColor', '#ff4fc100')
  } else if (status == 'offline') {
    AppStorage.Set('distributedColor', '#ffff0000')
  }
}
this.mDistributedObject.on("status", globalThis.statusCallback)

 

(sessionId: string, networkId: string, status: string)为 callback 回调函数返回的值,我们可以使用这些返回值判断设备上下线状态,其中 status 参数返回值为 online 或者 offline,表示设备对端设备上下线。

5、开启分布式数据对象同步监听

 

globalThis.changeCallback = (sessionId: string, fields: Array<string>) => {  console.info('分布式数据对象发生变化')  if (fields != null && fields != undefined) {    AppStorage.Set('message', `data change:${fields} sessionId:${sessionId}`)  }}this.mDistributedObject.on("change", globalThis.changeCallback)

当同一组网内分布式数据对象发生改变时,同一组网中的所有分布式数据对象同步发生变化,变化后的值为某一分布式数据对象改变后的值(sessionId: string, fields: Array<string>)为 callback 回调函数返回值,其中,sessionId 为组网唯一标识符,field 为分布式数据对象的数据变更列表。

此时此刻,分布式数据对象就基本上开发完成啦。

如果有小伙伴想要修改分布式数据对象的属性,可以直接修改

 

// @ts-ignorethis.mDistributedObject.name = 'lucy'// @ts-ignorethis.mDistributedObject.age = 25

注意:根据当前版本 IDE 的编码插件情况,不能直接写 this.mDistributedObject.age = 25,此时咱们需要加上// @ts-ignore 就可以啦。

最后,使用完分布式数据对象后大家要记得释放资源哦(注销所有监听,退出组网 sessionId,将分布式数据对象设置为空值)

 

this.mDistributedObject.off("change")this.mDistributedObject.off("status")this.mDistributedObject.setSessionId()this.mDistributedObject = nullthis.mSessionId = null

如果有小伙伴有两部或两部以上的华为设备,可以将程序烧录到设备中,体验一下分布式数据对象能力的快乐~

...全文
4830 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
HDC 2024华为开发者大会(脱敏)PPT汇总,共123份。 【HarmonyOS学生公开课】鸿蒙生态开发者解决方案关键特性-part3.pdf 【创新突破】HarmonyOS NEXT创新突破 打造生态差异化竞争力.pdf 【创新突破】HarmonyOS赋能,移动云盘笔记的体验变革.pdf 【创新突破】HarmonyOS高性能规则检测创新实践.pdf 【创新突破】一触即扫,精准还原:扫描全能王鸿蒙生态创新实践.pdf 【创新突破】懂车帝大模型智能Agent对接小艺智能体.pdf 【创新突破】无缝出行,美团骑行体验快人一步.pdf 【创新突破】身临其境,带你玩转折叠屏沉浸观影——咪咕视频沉浸观影.pdf 【创新突破】身临其境,带你玩转折叠屏沉浸观影——折叠屏优秀体验.pdf 【创新突破】软硬结合,智慧感知打造HarmonyOS第六感.pdf 【创新突破】高效省电,揭秘高德地图节能黑科技.pdf 【原生互联】HUAWEI ArkData:随口记、随时忆的高性能分布式智慧数据底座.pdf 【原生互联】分布式软总线 秒连接、多并发、高可靠、低功耗新体验.pdf 【原生互联】打造HarmonyOS全场景基因 让数据与内容自由流转起来.pdf 【原生互联】携手HarmonyOS,构建高效协同办公新体验.pdf 【原生互联】案例分享:小红书多端协同内容编创体验创新.pdf 【原生互联】案例分享:讯飞听见APP数据迁移经验分享.pdf 【原生互联】案例分享:起点读书全场景自由流转带来阅读新体验.pdf 【原生互联】端云协同助力快速换机,用户数据资产快速继承.pdf 【原生互联】自由互通:跨设备能力调用,助力应用创新多端体验.pdf 【原生互联】自由分享:剪贴、拖拽、近远场互传,应用间内容高效交换.pdf 【原生互联】自由流转:开发、分发、接续全栈能力,使能应用全场景无缝流转.pdf 【原生安全】HarmonyOS NEX评估保障级EAL5+认证分享.pdf 【原生安全】体系化构筑HarmonyOS NEXT安全底座支撑打造安全的数字基础设施.pdf 【原生安全】基于HarmonyOS NEXT的终端安全全链路防护.pdf 【原生安全】屹通中间件 基于HarmonyOS NEXT助力银行业APP安全.pdf 【原生安全】新HarmonyOS NEXT体系下小红书端安全防护实践.pdf 【原生安全】新架构与新生态下HarmonyOS NEXT安全隐私构筑与创新.pdf 【原生安全】泰尔带你解读HarmonyOS下安全隐私合规应用标准-APP用户权益保护的发展趋势及展望.pdf 【原生安全】石墨文档基于HarmonyOS NEXT DLP能力构建文档分享保护能力-基于HarmonyOS数据保护DLP助力石墨文档安全分享.pdf 【原生安全】鸿蒙生态全生命周期安全与隐私治理框架.pdf 【原生易用】HarmonyOS原生无障碍能力 使能更多“数字包容”创新应用开发.pdf 【原生易用】HarmonyOS原生输入法框架 助力讯飞打造安全、高效的输入体验.pdf 【原生易用】一步即扫,直达应用所有服务.pdf 【原生易用】基于HarmonyOS SDK构建简单易用的鸿蒙原生应用.pdf 【原生易用】微博打造“有声有色”生动笔记编创新体验.pdf 【原生易用】日程管理多源归一,服务场景一键直达.pdf 【原生易用】构建更便捷的华为账号使用体验.pdf 【原生易用】系统级播控框架,音视频“播、控、投”更易用.pdf 【原生易用】美团如何高效实现简单易用的用户体验旅程.pdf 【原生智能】HarmonyOS原生智能:构建未来智慧生态.pdf 【原生智能】HiAI开放端侧自定义计算编程:Ascend C.pdf 【原生智能】实践分享:HiAI助力应用低成本音质更清晰-网易云音乐.pdf 【原生智能】实践分享:做懂你的金融助手-建设银行.pdf 【原生智能】实践分享:小艺有声体验升级-喜马拉雅.pdf 【原生智能】实践分享:尽享智慧旅行服务-去哪儿旅行.pdf 【原生智能】实践分享:应用低成本生而智能-新浪新闻.pdf 【原生智能】小艺搜索 AI赋能,搜索新范式,共赢流量新机遇.pdf 【原生智能】智慧助手体验全新升级 开启生态接入新时代.pdf 【原生流畅】ArkTS协同方舟编译运行时使能鸿蒙应用原生流畅.pdf 【原生流畅】HarmonyOS原生流畅新技术概览.pdf 【原生流畅】HarmonyOS并行化技术助力应用体验更流畅.pdf 【原生流畅】HarmonyOS并行化编程框架 打造美图秀秀极致架构和体验.pdf 【原生流畅】HarmonyOS方舟图形引擎打造流畅、沉浸渲染效果.pdf 【原生流畅】HarmonyOS方舟多媒体引擎打造媒体丝滑视听体验.pdf 【原生流畅】HarmonyOS高性能网络协议栈带来流畅图文资源加载新体验.pdf 【原生流畅】如何开发高性能UI界面.pdf 【原生流畅】晶核性能优化实践.pdf 【原生流畅】智能网络感知 打造极致流畅的HarmonyOS版移动云盘图文体验.pdf 【原生流畅】毕昇编译器软硬芯云协同优化助力鸿蒙应用原生流畅.pdf 【原生流畅】淘宝HarmonyOS版本性能优化之路.pdf 【原生流畅】美团鸿蒙原生应用高效能动态化容器方案实践.pdf 【原生流畅】飞常准UI组件高性能优化实例分享.pdf 【原生流畅】高德地图HarmonyOS版本渲染优化实践.pdf 【原生流畅】高性能ArkWeb原生开发实践.pdf 【原生精致】HarmonyOS一站式多端体验设计-蜻蜓FM一多适配实践.pdf 【原生精致】万物归?,全新HarmonyOS系统架构.pdf 【原生精致】临境视听:打造双Vivid极致影音体验.pdf 【原生精致】天生精致,HarmonyOS一站式多端体验设计-易车.pdf 【原生精致】如何打造HarmonyOS精致应用体验.pdf 【原生精致】小红书鸿蒙原生应用相机实践.pdf 【原生精致】打造无缝协作的原生应用设计数字化体验 - Pixso.pdf 【原生精致】方天视窗 带你感受不?样的?端动效体验 - 华为欧拉部菲尔兹Lab.pdf 【原生精致】触手可得,打造鸿蒙极致触感体验.pdf 【原生精致】让你的相机“焕然一新” -华为终端BG HarmonyOS相机架构专家.pdf 【开发套件】HarmonyOS SDK 助力鸿蒙原生应用高效开发,好用易用.pdf 【开发套件】HarmonyOS赋能套件助力高效开发.pdf 【开发套件】“稳”操胜券 快手调试经验谈.pdf 【开发套件】仓颉语言助力鸿蒙原生应用高效开发.pdf 【开发套件】去哪儿HarmonyOS NEXT落地实践-模拟器带你尝鲜鸿蒙特性.pdf 【开发套件】支付宝 X HarmonyOS大型应用架构设计实践.pdf 【开发套件】新浪微博性能优化之道 打造流畅滑动体验.pdf 【开发套件】造利器固质量,HarmonyOS应用测试最佳实践.pdf 【开发套件】高效跨语言开发 助力WPS接入HarmonyOS NEXT.pdf 【开发套件】鸿蒙原生应用高效开发与实践分享.pdf 【星闪】HarmonyOS+NEXT来了,怎么抓住星闪的闪光点.pdf 【星闪】HarmonyOS星闪北向开放能力预发布.pdf 【星闪】拥抱开发者助力星生态.pdf 【星闪】星闪+ICCE加速无感数字车钥匙应用.pdf 【星闪】星闪在鸿蒙分布式软总线的应用展望.pdf 【星闪】星闪模组,全面引领智慧物联新浪潮.pdf 【星闪】星闪给麦克风带来的全新体验.pdf 【智慧出行】议题1:抓住HarmonyOS新机遇,重塑智慧出行产业.pdf 【智慧出行】议题2:智能座舱语音分级与测评创新进展及生态构建.pdf 【智慧出行】议题3:AI时代的智能座舱音乐体验.pdf 【智慧出行】议题4:喜马拉雅在智能座舱空间音频的探索与应用.pdf 【智慧出行】议题5:融合与创新,引领智能座舱中的视频娱乐新纪元.pdf 【智慧出行】议题6:打造儿童的全场景鸿蒙智行生活体验.pdf 【智慧出行】议题7:HarmonyOS智慧出行应用生态策略.pdf 【智慧出行】议题8:HUAWEI+HiCar+手机座舱生态融合.pdf 【统一生态】ArkUI-X跨平台框架分享.pdf 【统一生态】OpenHarmony在视觉领域的实践分享.pdf 【统一生态】“星闪+OpenHarmony”构建万物智联新引擎.pdf 【统一生态】海思5+2解决方案 助力OpenHarmony生态发展.pdf 【统一生态】统一应用平台实践分享 - 宝宝巴士世界.pdf 【统一生态】统一生态 鸿蒙生态设备统一互联底座和统一应用平台.pdf 【统一生态】设备互联互通行业案例 - 医疗行业场景分享.pdf 【统一生态】设备互联互通行业案例 - 金融行业外设接入场景分享.pdf 【统一生态】设备互联互通行业案例-政企办公行业场景分享.pdf 【鸿蒙生态伙伴SDK】Flutter在HarmonyOS中的开发实践.pdf 【鸿蒙生态伙伴SDK】uni-app助力开发者快速构建高性能鸿蒙原生应用.pdf 【鸿蒙生态伙伴SDK】Weex跨平台开发策略助力航班管家高效开发鸿蒙原生应用.pdf 【鸿蒙生态伙伴SDK】共创共赢,鸿蒙生态伙伴SDK大展“鸿”图.pdf 【鸿蒙生态伙伴SDK】凡泰极客FinClip SDK 加速轻量级鸿蒙原生应用开发.pdf 【鸿蒙生态伙伴SDK】多框架并存-58同城高性能体验升级.pdf 【鸿蒙生态伙伴SDK】携手鸿蒙生态伙伴,共建繁荣生态之路.pdf 【鸿蒙生态伙伴SDK】生态市场携手服务商伙伴 联合创新共谋商业成功.pdf 【鸿蒙生态伙伴SDK】生态管理模式安全可控 构建鸿蒙生态伙伴SDK安全新秩序.pdf 【鸿蒙生态伙伴SDK】科蓝SDK在金融领域鸿蒙原生应用开发中的实践.pdf 【鸿蒙生态伙伴SDK】聚焦OpenHarmony三方库重点垂域 持续丰富三方开源多元体验.pdf 【鸿蒙生态伙伴SDK】蚂蚁mPaaS,为鸿蒙原生应用高效开发注入创新动力.pdf 【鸿蒙生态伙伴SDK】阿里云MediaBox音视频SDK开发实践经验分享.pdf 【鸿蒙生态伙伴SDK】鸿蒙生态伙伴SDK市场上线仪式.pdf

5,301

社区成员

发帖
与我相关
我的任务
社区描述
HarmonyOS是一款“面向未来”、面向全场景的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
分布式学习 企业社区
社区管理员
  • HarmonyOS技术社区
  • Edice
  • BaoWei
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧