当前位置: 首页 > news >正文

OpenHarmony数据管理核心技术:UTD、UDS与UDMF深度剖析

目录

  • 概述

  • 1. 标准化数据定义与描述

    • 1.1 标准化数据类型 (UTD)
      • UTD的设计原则
      • UTD的定义
      • 预置数据类型
      • 应用自定义数据类型
      • 接口说明
      • 代码示例
    • 1.2 标准化数据结构 (UDS)
      • UDS的设计原则
      • UDS的组成
      • 预置数据结构
      • 应用自定义数据结构
      • 常见数据结构
  • 2. 数据共享机制

    • 2.1 DataShareExtensionAbility
      • 运作机制
      • 数据提供方开发步骤
      • 数据访问方开发步骤
      • 接口说明
    • 2.2 静默访问
      • 运作机制
      • 支持的数据类型
      • URI格式
      • 开发步骤
      • 接口说明
  • 3. 标准化数据通路 (UDMF)

    • 3.1 概述
    • 3.2 设计目标
    • 3.3 UDMF组成
    • 3.4 数据通路类型
    • 3.5 URI标识
    • 3.6 数据提供方开发
    • 3.7 数据访问方开发
  • 4. 跨设备数据同步

    • 4.1 概述
    • 4.2 同步机制与策略
    • 4.3 一致性模型
    • 4.4 分布式数据库同步
    • 4.5 数据同步配置
    • 4.6 同步事件监听
    • 4.7 访问控制机制
  • 5. 开发接口与示例

    • 5.1 ArkTS接口
    • 5.2 C/C++接口
  • 结语

概述

OpenHarmony提供了全面的数据管理解决方案,包括跨应用数据共享、跨设备数据同步、标准化数据定义与描述等功能。本文档汇总了OpenHarmony中数据管理的核心技术组件和实现方式,帮助开发者了解和使用这些功能。

1. 标准化数据定义与描述

1.1 标准化数据类型 (UTD)

标准化数据类型(Uniform Type Descriptor,简称UTD)旨在解决数据类型描述的歧义问题。例如,JPEG图片可能被描述为image/jpeg、.jpg、.jpeg或image/picture等不同形式,导致跨系统传输时,接收方需依赖复杂的兼容逻辑才能识别数据类型。

UTD的设计原则
  • 层级结构:基于MIME Type或文件后缀名构建层级结构,描述不同类型间的兼容与继承关系
  • 分类原则
    • 物理分类:根节点为general.entity,用于描述类型的物理属性
    • 逻辑分类:根节点为general.object,用于描述类型的功能性特征
UTD的定义

UTD由以下属性组成:

  • typeId:数据类型的唯一标识符,由应用bundleName + 具体类型名组成
  • description:数据类型的描述信息
  • icon:数据类型的图标资源
  • isSystemType:是否为系统预置类型
  • belongingToTypes:所属的父类型列表
  • filenameExtensions:关联的文件后缀名列表
  • mimeTypes:关联的MIME类型列表
预置数据类型

系统预置了常用的标准化数据类型,包括:

  • 基础类型:如general.entity、general.object、general.file等
  • 媒体类型:如general.image、general.audio、general.video等
  • 具体格式:如general.png、general.jpeg、general.mp3等
应用自定义数据类型

开发者可以创建自定义数据类型,需满足以下约束:

  • TypeId:由应用bundleName + 具体类型名组成
  • BelongingToTypes:必须为已存在的数据类型
  • FilenameExtensions和MIMETypes:可选,用于关联文件后缀和MIME类型
工作原理

应用自定义数据类型的工作流程如下:

  1. 应用通过API注册自定义数据类型
  2. 系统验证数据类型的合法性
  3. 数据类型被添加到UTD系统中
  4. 其他应用可以通过API查询和使用这些数据类型
约束限制
  • 应用自定义数据类型的typeId必须以应用的bundleName为前缀
  • 每个应用最多可注册100个自定义数据类型
  • 自定义数据类型不能与系统预置类型重复
  • BelongingToTypes必须为已存在的数据类型
开发步骤
  1. 导入uniformTypeDescriptor模块
  2. 定义自定义数据类型
  3. 调用registerUniformDataType接口注册数据类型
  4. 使用getUniformDataType接口验证注册结果
接口说明

以下是UTD相关的主要接口:

接口名称 描述
belongsTo(typeId: string, belongingToTypeId: string): boolean 判断一个数据类型是否属于另一个数据类型
getUniformDataType(typeId: string): UniformDataType 获取指定数据类型的详细信息
getUniformDataTypesByFilenameExtension(filenameExtension: string): Array 通过文件后缀获取对应的数据类型列表
getUniformDataTypesByMimeType(mimeType: string): Array 通过MIME类型获取对应的数据类型列表
getUniformDataTypeFilenameExtensions(typeId: string): Array 获取指定数据类型关联的文件后缀列表
getUniformDataTypeMimeTypes(typeId: string): Array 获取指定数据类型关联的MIME类型列表
registerUniformDataType(typeInfo: UniformDataType): void 注册自定义数据类型
unregisterUniformDataType(typeId: string): void 注销自定义数据类型
代码示例
示例1:查询媒体类文件的归属关系
import uniformTypeDescriptor from '@ohos.data.uniformTypeDescriptor';// 判断JPEG图片是否属于图片类型
let isImage = uniformTypeDescriptor.belongsTo('general.jpeg', 'general.image');
console.log('JPEG is image: ' + isImage); // 输出: true// 判断MP3文件是否属于图片类型
let isImage2 = uniformTypeDescriptor.belongsTo('general.mp3', 'general.image');
console.log('MP3 is image: ' + isImage2); // 输出: false
示例2:通过文件后缀获取数据类型
import uniformTypeDescriptor from '@ohos.data.uniformTypeDescriptor';// 获取.jpg文件对应的数据类型
let jpegTypes = uniformTypeDescriptor.getUniformDataTypesByFilenameExtension('.jpg');
console.log('JPEG types: ' + JSON.stringify(jpegTypes));// 获取.png文件对应的数据类型
let pngTypes = uniformTypeDescriptor.getUniformDataTypesByFilenameExtension('.png');
console.log('PNG types: ' + JSON.stringify(pngTypes));
示例3:通过MIME类型获取数据类型
import uniformTypeDescriptor from '@ohos.data.uniformTypeDescriptor';// 获取image/jpeg MIME类型对应的数据类型
let jpegTypes = uniformTypeDescriptor.getUniformDataTypesByMimeType('image/jpeg');
console.log('JPEG MIME types: ' + JSON.stringify(jpegTypes));// 获取image/png MIME类型对应的数据类型
let pngTypes = uniformTypeDescriptor.getUniformDataTypesByMimeType('image/png');
console.log('PNG MIME types: ' 
http://www.dtcms.com/a/547033.html

相关文章:

  • 什么是网站开发网站开发面向对象
  • 如何开发电子商务网站滨州网站建设hskj360
  • 对象存储技术解析:选型对比、架构设计与动态切换实战
  • 网站建设丶金手指下拉十五24小时最新在线视频免费观看
  • dell公司网站建设的特点河北石家庄新闻
  • 门户网站建设成本编程入门基础知识
  • 网站开发建设专业新闻今天的最新新闻
  • discuz网站备份聊城优化网站建设
  • 免费发布租房信息网站如何确保网站安全
  • 东莞做网站注意事项网站建设教程搭建
  • 怎么能加强门户网站建设口碑最好装修公司
  • 甘肃省第九建设集团网站首页刷网站排名 优帮云
  • 手绘教学网站手机app定制
  • 学校做的网站外面访问不了做网站找 汇搜网络
  • 百度云网站开发中国档案网站建设的特点
  • 网站搭建谷歌seowordpress 怎么登录地址
  • 珠海网站建设报价林州市网站建设
  • 在演示文稿上网站怎么做html5酷炫网站
  • 青岛做网站大公司有哪些网站设计工作室公司
  • 安装了lnmp怎么做网站学做ppt的网站 免费下载
  • linux上配置一个自己的命令
  • 工信局网站备案查询著名vi设计公司
  • 淘宝网官网登录首页百度快照优化的优势是什么
  • 购买域名的网站虚拟服务器怎样做网站
  • wordpress get user网站关键词seo优化公司
  • 聊城网站建设代理商公司注册资金最低多少
  • 多表查询a
  • 内部可变性模式:Rust 中不变性与可变性的精妙平衡
  • 做网站的费用入什么科目商户后台管理系统
  • 门窗卫浴网站建设修改 wordpress 模版