HarmonyOS 应用开发之ArkData标准化数据定义,HarmonyOS鸿蒙界面布局设计

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

然后在utd.json5配置文件中进行以下声明:

{
“ReferenceUniformDataTypeDeclarations”: [
{
“typeId”: “com.example.myFirstHap.image”,
“belongingToTypes”: [“general.image”],
“FilenameExtensions”: [“.myImage”, “.khImage”],
“mimeTypes”: [“application/myImage”, “application/khImage”],
“description”: “My Image.”,
“referenceURL”: “”
}
]
}

  1. 其他应用也可以在引用当前应用内的自定义数据类型之后,基于已引用的自定义数据类型进行自定义。utd.json5配置文件示例如下:

{
“UniformDataTypeDeclarations”: [
{
“typeId”: “com.example.mySecondHap.image”,
“belongingToTypes”: [“com.example.myFirstHap.image”],
“FilenameExtensions”: [“.myImageEx”, “.khImageEx”],
“mimeTypes”: [“application/my-ImageEx”, “application/khImageEx”],
“description”: “My Image extension.”,
“referenceURL”: “”
}
]
}

接口说明

以下是UTD常用接口说明,对于预置数据类型和应用自定义数据类型同样适用,更多接口和详细说明。

接口名称描述
UniformDataTypeOpenHarmony标准化数据类型的枚举定义。此处不再展开列举各枚举。
belongsTo(type: string): boolean判断当前标准化数据类型是否归属于指定的标准化数据类型。
isLowerLevelType(type: string): boolean判断当前标准化数据类型是否是指定标准化数据类型的低层级类型。
isHigherLevelType(type: string): boolean判断当前标准化数据类型是否是指定标准化数据类型的高层级类型。
getUniformDataTypeByFilenameExtension(filenameExtension: string, belongsTo?: string): string根据给定的文件后缀名和所归属的标准化数据类型查询标准化数据类型的ID。
getUniformDataTypeByMIMEType(mimeType: string, belongsTo?: string): string根据给定的MIME类型和所归属的标准化数据类型查询标准化数据类型的ID。

开发步骤

下面以媒体类文件的归属类型查询场景为例,说明如何使用UTD。

  1. 导入@ohos.data.uniformTypeDescriptor模块。
  2. 可根据 “.mp3” 文件后缀查询对应UTD数据类型,并查询对应UTD数据类型的具体属性。
  3. 可根据 “audio/mp3” MIMEType查询对应UTD数据类型,并查询对应UTD数据类型的具体属性。
  4. 将上述步骤查询出来的数据类型进行比较,确认类型是否相等。
  5. 根据上述步骤中查询到的标准数据类型“general.mp3”与表示音频数据的已知标准数据类型“general.audio”做比较查询,确认是否存在归属关系。

// 1.导入模块
import uniformTypeDescriptor from ‘@ohos.data.uniformTypeDescriptor’;

try {
// 2.可根据 “.mp3” 文件后缀查询对应UTD数据类型,并查询对应UTD数据类型的具体属性
let fileExtention = ‘.mp3’;
let typeId1 = uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(fileExtention);
let typeObj1 = uniformTypeDescriptor.getTypeDescriptor(typeId1);
console.info(‘typeId:’ + typeObj1.typeId);
console.info(‘belongingToTypes:’ + typeObj1.belongingToTypes);
console.info(‘description:’ + typeObj1.description);
console.info(‘referenceURL:’ + typeObj1.referenceURL);

// 3.可根据 “audio/mp3” MIMEType查询对应UTD数据类型,并查询对应UTD数据类型的具体属性。
let mineType = ‘audio/mp3’;
let typeId2 = uniformTypeDescriptor.getUniformDataTypeByMIMEType(mineType);
let typeObj2 = uniformTypeDescriptor.getTypeDescriptor(typeId2);
console.info(‘typeId:’ + typeObj2.typeId);
console.info(‘belongingToTypes:’ + typeObj2.belongingToTypes);
console.info(‘description:’ + typeObj2.description);
console.info(‘referenceURL:’ + typeObj2.referenceURL);

// 4.将数据类型进行比较,确认是否同一种数据类型
if (typeObj1 != null && typeObj2 != null) {
let ret = typeObj1.equals(typeObj2);
console.info(‘typeObj1 equals typeObj2, ret:’ + ret);
}

// 5.将查询到的标准数据类型“general.mp3”与表示音频数据的已知标准数据类型“general.audio”做比较查询,确认是否存在归属关系。
if (typeObj1 != null) {
let ret = typeObj1.belongsTo(‘general.audio’);
console.info(‘belongsTo, ret:’ + ret);
let mediaTypeObj = uniformTypeDescriptor.getTypeDescriptor(‘general.media’);
ret = mediaTypeObj.isHigherLevelType(‘general.audio’); // 确认是否存在归属关系
console.info(‘isHigherLevelType, ret:’ + ret);
}
} catch (err) {
console.error(‘err message:’ + err.message + ‘, err code:’ + err.code);
}

标准化数据结构

场景介绍

针对一些UTD标准化数据类型,为了方便业务使用,我们提供了标准化数据结构,例如OpenHarmony系统定义的桌面卡片类型(对应的标准化数据类型标识为为’openharmony.form’),我们明确定义了该数据结构对应的相关描述信息。

某些业务场景下应用可以直接使用我们具体定义的UTD标准化数据结构,例如跨应用拖拽场景。拖出方应用可以按照标准化数据结构将拖拽数据写入 拖拽事件 ,拖入方应用从拖拽事件中读取拖拽数据并按照标准化数据结构进行数据的解析。这使得不同应用间的数据交互遵从相同的标准定义,有效减少了跨应用数据交互的开发工作量。

当前支持的标准化数据结构

UDMF针对部分标准化数据类型定义的标准化数据结构如下所示:

数据类型数据结构说明
‘general.text’Text文本
‘general.plain-text’PlainText纯文本
‘general.hyperlink’Hyperlink超链接
‘general.html’HTML富文本
‘general.file’File文件
‘general.image’Image图片
‘general.video’Video视频
‘general.audio’Audio音频
‘general.folder’Folder文件夹
‘openharmony.form’SystemDefinedForm卡片
‘openharmony.app-item’SystemDefinedAppItem图标
‘openharmony.pixel-map’SystemDefinedPixelMap二进制图片

约束限制

UDMF支持批量数据记录的分组管理,每个分组整体大小不超过200MB,其中PlainText、Hyperlink、HTML内单个属性值数据上限20M。

接口说明

UDMF提供了统一数据对象UnifiedData,用于封装一组数据记录UnifiedRecord。数据记录UnifiedRecord则是对UDMF支持的数据内容的抽象定义,例如一条文本记录、一条图片记录等。数据记录中的数据内容类型对应为各数据类型UniformDataType。

以下是标准化数据结构的常用接口说明,更多接口和具体说明,请见 标准化数据通路 和 标准化数据定义与描述 。

类名称接口名称描述
UnifiedRecordgetType(): string获取当前数据记录对应的具体数据类型。
UnifiedDataconstructor(record: UnifiedRecord)用于创建带有一条数据记录的统一数据对象。
UnifiedDataaddRecord(record: UnifiedRecord): void在当前统一数据对象中添加一条数据记录。
UnifiedDatagetRecords(): Array将当前统一数据对象中的所有数据记录取出,通过本接口取出的数据为UnifiedRecord类型,需通过getType获取数据类型后转为子类再使用。

开发步骤

以使用标准化数据结构定义数据内容(包含图片、纯文本两条数据记录)为例,提供基本的开发步骤。

  1. 导入@ohos.data.unifiedDataChannel@ohos.data.uniformTypeDescriptor模块。

import unifiedDataChannel from ‘@ohos.data.unifiedDataChannel’;
import uniformTypeDescriptor from ‘@ohos.data.uniformTypeDescriptor’;

  1. 创建图片数据记录,并初始化得到带有该数据记录的UnifiedData对象。
  • 创建图片数据记录。

let image = new unifiedDataChannel.Image();

  • 修改对象属性。

// Image对象包含一个属性imageUri
image.imageUri = ‘…’;

  • 访问对象属性。

console.info(imageUri = ${image.imageUri});

  • 创建一个统一数据对象实例。

let unifiedData = new unifiedDataChannel.UnifiedData(image);

  1. 创建纯文本数据类型记录,将其添加到刚才创建的UnifiedData对象。

let plainText = new unifiedDataChannel.PlainText();
plainText.textContent = ‘this is textContent of plainText’;
plainText.abstract = ‘abstract of plainText’;
plainText.details = {
plainKey1: ‘plainValue1’,
plainKey2: ‘plainValue2’,
};
unifiedData.addRecord(plainText);

  1. 记录添加完成后,可获取当前UnifiedData对象内的所有数据记录。

let records = unifiedData.getRecords();

  1. 遍历每条记录,判断该记录的数据类型,转换为子类对象,得到原数据记录。

for (let i = 0; i < records.length; i ++) {
// 读取该数据记录的类型
let type = records[i].getType();
switch (type) {
case uniformTypeDescriptor.UniformDataType.IMAGE:
// 转换得到原图片数据记录
let image = records[i] as unifiedDataChannel.Image;
break;
case uniformTypeDescriptor.UniformDataType.PLAIN_TEXT:
// 转换得到原文本数据记录
let plainText = records[i] as unifiedDataChannel.PlainText;
break;
default:
break;
}
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05
  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05
  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05
  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

台任务(Background Task)管理
11. 设备管理
12. 设备使用信息统计
13. DFX
14. 国际化开发
15. 折叠屏系列
16. ……

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
[外链图片转存中…(img-IvKaTNFN-1713294159964)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值