HarmonyOS开发:跨应用数据共享详解

目录

  • 前言
  • 跨应用数据共享的重要性
  • HarmonyOS的数据共享能力
  • 相关的基本概念
  • 跨应用数据共享的数据管理
  • 具体实现跨应用数据共享
  • 延伸:数据共享的安全和隐私
  • 结语

前言

现在的移动操作系统中,应用之间的数据共享已成为提升用户体验和实现功能互补的重要手段,尤其是在移动端开发中,关于数据存储和数据共享是重中之重的事情。而HarmonyOS作为华为推出的新一代操作系统,它提供了一套先进的跨应用数据共享机制,允许应用之间安全、高效地共享数据。在HarmonyOS开发中,根据HarmonyOS的数据共享特有优势,让HarmonyOS应用开发体验到新技术的使用快感。那么本文就来详细分享一下HarmonyOS中跨应用之间的数据共享等使用方法,以及示例案例分享,希望通过本文能够帮助更多开发者。

跨应用数据共享的重要性

先来了解一下关于跨应用数据共享,其实跨应用数据共享在实际应用中非常重要,个人觉得以下方面对于跨应用数据共享至关重要,具体如下所示:

  • 用户体验:它提供无缝衔接的体验,比如在不同应用间共享图片或文档,这都是非常实用的方面;
  • 功能互补:允许应用利用其他应用的功能或数据,实现更丰富的服务,应用之间的数据互通也很重要;
  • 效率提升:减少数据的重复输入和处理,提高操作效率,尤其是现在处于大数据时代,至关重要。

HarmonyOS的数据共享能力

根据鸿蒙官方的介绍,HarmonyOS通过以下机制支持跨应用数据共享:

  • 分布式软总线:提供设备间通信的能力,实现数据的无缝流转,它允许设备之间建立快速、稳定的连接。
  • Ability Slice:允许应用以卡片形式被其他应用调用和共享,允许应用将其部分功能或数据以卡片形式分享给其他应用;
  • 公共数据目录:在文件系统中定义公共数据存储区域,供多个应用访问,这些数据可以被具有相应权限的其他应用访问。

再来分享一下HarmonyOS的跨应用数据共享,跨应用数据共享提供了向其他应用共享以及管理其数据的方法,支持不同应用之间的数据协同。在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等,但不是所有的数据都允许其他应用访问,比如账号、密码等;另外,有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以针对不同数据共享场景以及数据隐私保护,设计一个安全、便捷的跨应用数据共享机制是十分必要的。

相关的基本概念

在进行跨应用数据共享开发前,先来了解以下相关概念,具体如下所示:

  • 数据提供方:提供数据及实现相关业务的应用程序,也称为生产者或服务端;
  • 数据访问方:访问数据提供方所提供的数据或业务的应用程序,也称为消费者或客户端;
  • 数据集:用户要插入的数据集合,可以是一条或多条数据。数据集以键值对的形式存在,键为字符串类型,值支持数字、字符串、布尔值、无符号整型数组等多种数据类型;
  • 结果集:用户查询之后的结果集合,其提供了灵活的数据访问方式,以便用户获取各项数据;
  • 谓词:用户访问数据库中的数据所使用的筛选条件,经常被应用在更新数据、删除数据和查询数据等场景。

跨应用数据共享的数据管理

目前来看,基于跨应用数据共享中涉及的数据提供方应用个数的不同情况,数据管理提供支持一对多跨应用数据共享和多对多跨应用数据共享的能力。

1、一对多跨应用数据共享

跨应用一对多数据共享的场景,目前仅对系统应用开放,暂不具体展开提供相关内容和指导。

2、多对多跨应用数据共享

区别于一对多数据共享只有一个数据提供方,当多个应用之间需要相互进行数据共享时,即多对多的跨应用数据共享场景下,对于数据的定义、流通和权限管理等是十分必要的。统一数据管理框架(UDMF)即提供一种新的数据共享与交互方式,可以实现多对多跨应用数据共享。

具体实现跨应用数据共享

其实应用可以根据UDMF标准化数据通路提供的数据接入与读取接口,将符合标准化数据定义的数据写入UDMF不同的数据共享通路,并提供多应用进行读取。写入UDMF中的数据依据应用定义的权限、数据通路定义的权限以及整个UDMF框架定义的权限管理逻辑进行管理,写入通路中的数据的生命周期的管理也遵循上述逻辑。这样离散在各个应用的碎片化数据可以在UDMF的不同通路中形成聚合效应,提升开发者跨应用数据协同的效率,同时会极大提升用户的数据体验。

1、场景介绍

在HarmonyOS中可以通过标准化数据通路实现数据共享,这里做一个场景介绍,比如在多对多跨应用数据共享的场景下,需要提供一条数据通路能够接入多个不同应用的数据并共享给其他应用进行读取,UDMF针对多对多跨应用数据共享的不同业务场景提供了标准化的数据通路,提供了标准化的数据接入与读取接口。

2、标准化数据通路的定义和实现

先来了解一下标准化数据通路,标准化数据通路是为各种业务场景提供的跨应用的数据接入与读取通路,它可以暂存应用需要共享的符合标准化数据定义的统一数据对象,并提供给其他应用进行访问,同时按照一定的策略对暂存数据的访问权限和生命周期进行管理。标准化数据通路通过UDMF提供的系统服务实现,应用(数据提供方)需要共享公共数据时可以通过UDMF提供的插入接口将数据写入到UDMF的数据通路中,并且可以通过UDMF提供的更新和删除接口对已经存入UDMF数据通路的数据进行更新和删除操作,而且在完成必要的权限校验后,目标应用(数据访问方)可以通过UDMF提供的读取接口进行数据的访问,数据被读取后,UDMF会统一对数据的生命周期进行管理。

其实,统一数据对象UnifiedData在UDMF数据通路中具有全局唯一URI标识,其定义为udmf://intention/bundleName/groupId,其中各组成部分的含义分别为:

  • udmf: 协议名,表示使用UDMF提供的数据通路。
  • intention: UDMF已经支持的数据通路类型枚举值,对应不同的业务场景。
  • bundleName: 数据来源应用的包名称。
  • groupId:分组名称,支持批量数据分组管理。

当前UDMF中的跨应用数据共享通路有:公共数据通路。

3、公共数据通路

关于公共数据通路,其实就是应用共享的公用数据共享通路,所有应用均可向通路中写入数据,写入方可以根据写入数据时生成的数据唯一标识符进行数据的更新、删除、指定数据标识符进行查询、全量查询,而数据读取方只能读取当前数据通路中的全量数据,通路对应的Intention枚举类型为DATA_HUB。

4、标准化数据通路的相关接口

根据鸿蒙官方介绍,关于UDMF标准化数据通路的相关接口,均为异步接口,异步接口均有callback和Promise两种返回形式,下图均以callback形式为例,具体如下所示:

接口名称

描述

insertData(options: Options, data: UnifiedData, callback: AsyncCallback): void

将数据写入UDMF的公共数据通路中,并生成数据的唯一标识符,使用callback异步回调。

updateData(options: Options, data: UnifiedData, callback: AsyncCallback): void

更新已写入UDMF的公共数据通路的数据,使用callback异步回调。

queryData(options: Options, callback: AsyncCallback>): void

查询UDMF公共数据通路的数据,使用callback异步回调。

deleteData(options: Options, callback: AsyncCallback>): void

删除UDMF公共数据通路的数据,返回删除的数据集,使用callback异步回调。

5、开发步骤

由于篇幅有限,这里以一次多对多数据共享的过程为例说明开发步骤,数据提供方可以通过UMDF提供的insertData接口将数据写入公共数据通路,获取到的返回值(生成的数据的唯一标识符),可用于对其插入的数据进行更新和删除操作。数据访问方则可以通过UDMF提供的查询接口获取当前公共数据通路的全量数据。

6、数据提供方

(1)导入unifiedDataChannel和uniformTypeDescriptor模块

import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';

(2)创建一个统一数据对象并插入到UDMF的公共数据通路中

import { BusinessError } from '@kit.BasicServicesKit';
let plainText = new unifiedDataChannel.PlainText();
plainText.textContent = 'hello sanzhanggui';
let unifiedData = new unifiedDataChannel.UnifiedData(plainText);
// 要插入数据的数据通路枚举类型
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
}
try {
unifiedDataChannel.insertData(options, unifiedData, (err, key) => {
if (err === undefined) {
console.info(Succeeded in inserting data. key = ${key});
} else {
console.error(Failed to insert data. code is ${err.code},message is ${err.message} );
}
});
} catch (e) {
let error: BusinessError = e as BusinessError;
console.error(Insert data throws an exception. code is ${error.code},message is ${error.message} );
}

(3)更新上一步,插入统一数据对象

let plainText = new unifiedDataChannel.PlainText();
plainText.textContent = 'Hi, sanzhanggui';
let unifiedData = new unifiedDataChannel.UnifiedData(plainText);
// 指定要更新的统一数据对象的URI
let options: unifiedDataChannel.Options = {
// 这里的key值要与insertData接口回调函数中key保持一致
key: 'udmf://DataHub/com.ohos.t/334'
};
try {
unifiedDataChannel.updateData(options, unifiedData, (err) => {
if (err === undefined) {
console.info('Succeeded');
} else {
console.error(Failed to update data. code is ${err.code},message is ${err.message} );
}
});
} catch (e) {
let error: BusinessError = e as BusinessError;
console.error(Update data throws an exception. code is ${error.code},message is ${error.message} );
}

(4)删除存储在UDMF公共数据通路中的统一数据对象

// 删除数据的数据通路枚举类型
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
};
try {
unifiedDataChannel.deleteData(options, (err, data) => {
if (err === undefined) {
console.info(Succeeded = ${data.length});
for (let i = 0; i < data.length; i++) {
let records = data[i].getRecords();
for (let j = 0; j < records.length; j++) {
if (records[j].getType() === uniformTypeDescriptor.UniformDataType.PLAIN_TEXT) {
let text = records[j] as unifiedDataChannel.PlainText;
console.info(${i + 1}.${text.textContent});
}
}
}
} else {
console.error(Failed  ${err.code},message is ${err.message} );
}
});
} catch (e) {
let error: BusinessError = e as BusinessError;
console.error(Delete  ${error.code},message is ${error.message} );
}

7、数据访问方

(1)导入unifiedDataChannel和uniformTypeDescriptor模块

import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';

(2)查询存储在UDMF公共数据通路中的全量统一数据对象

import { BusinessError } from '@kit.BasicServicesKit';
// 查询数据的数据通路枚举类型
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
};
try {
unifiedDataChannel.queryData(options, (err, data) => {
if (err === undefined) {
console.info(Succeeded = ${data.length});
for (let i = 0; i < data.length; i++) {
let records = data[i].getRecords();
for (let j = 0; j < records.length; j++) {
if (records[j].getType() === uniformTypeDescriptor.UniformDataType.PLAIN_TEXT) {
let text = records[j] as unifiedDataChannel.PlainText;}
}
}
} else {
console.error(Failed ${err.code},message is ${err.message} );
}
});
} catch(e) {
let error: BusinessError = e as BusinessError;
console.error(Query ${error.code},message is ${error.message} );
}

上面代码示例,详细演示了一次多对多数据共享的过程以及开发步骤,数据提供方可以通过UMDF提供的insertData接口将数据写入公共数据通路,获取到的返回值,可用于对其插入的数据进行更新和删除操作;数据访问方则可以通过UDMF提供的查询接口获取当前公共数据通路的全量数据。

延伸:数据共享的安全和隐私

虽然数据共享带来开发和使用的极大便利,但是随着现在数据安全的严峻形势,数据隐私越来越成为大家关注的重点,那么在实现跨应用数据共享时,也必须考虑数据安全和用户隐私,这里简单分享一下关于数据共享的安全预防:

  • 权限管理:确保只有具有适当权限的应用才能访问共享数据,切忌没有设置权限。
  • 数据加密:对共享的数据进行加密,确保数据传输的安全性,对敏感数据进行加密处理。
  • 用户授权:在需要时请求用户的明确授权,尊重用户的选择,根据实际需要来选择授权,切忌一键授权所有权限。

结束语

经过本文的详细介绍,大家想必对跨应用数据共享有了更加深入的了解和掌握,我们也可以看到跨应用数据共享是HarmonyOS提升用户体验和促进应用间协作的重要特性。通过HarmonyOS中跨应用数据共享的具体使用示例,可以很好的进行使用掌握。但是,我们在实现数据共享时,也要重视数据安全和用户隐私,确保数据共享的合理性和安全性,这样我们的应用才能既好用又安全!随着HarmonyOS生态的不断发展,跨应用数据共享肯定会变得更加智能、高效和安全!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

watch 和 watchEffect 的隐藏点 --- 非常细致

之前有一篇文章讲述了 watch 和 watchEffect 的使用&#xff0c;但在实际使用中&#xff0c;仍然存在一些“隐藏点”&#xff0c;可能会影响开发&#xff0c;在这补充一下。 1. watch 的隐藏点 1.1 性能陷阱&#xff1a;深度监听的影响 当在 watch 中使用 deep: true 来监听…

[MRCTF2020]套娃1

打开题目&#xff0c;查看源代码&#xff0c;有提示 有两层过滤 1.过滤"_"与"%5f" 。 这里要求的参数必须是"b_u_p_t"但是不能检测出"_"。这里看着很作弄人。其实这里要用到php里非法参数名的问题。可以参考一下博客 ?b.u.p.t2333…

Python爬虫技术与K-means算法的计算机类招聘信息获取与数据分析

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 目录 摘要.... 1 Abstract 2 1 引言.... 3 1.1 研究背景... 3 1.2 国内外研究现状... 4 1.3 研究目的... 5 1.4 研究意义... 7 2 关键技术理论介绍... 7 2.1 Python爬虫... 7 2.1 K-means…

微软开源库 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口&#xff0c;实现对程序异常的拦截 C软件异常排查从入门到精通…

VMware虚拟机下安装Ubuntu22.04以及汉化配置保姆级教程

目录 一.VMware和Ubuntu下载 二.在VMware中创建Ubuntu 1.点击 创建新的虚拟机 2.选择典型 3.选择Ubuntu镜像包&#xff08;自定义存放的位置&#xff09; 4.创建个人信息&#xff08;密码一定要牢记&#xff09; 5.选择虚拟机的安装位置 6.其他配置项&#xff08;默认下…

Unity Obfuscator 使用说明

一、Assembly - Settings 1. 核心Unity程序集&#xff08;Assembly-CSharp&#xff09; Obfuscate Assembly-CSharp: 开启 这是Unity的核心程序集&#xff0c;所有没有存储在程序集定义文件&#xff08;assembly definition file&#xff09;中的代码都会被存储在这里。大多数…

C++多态详解

1. 多态的概念 多态就是函数调用的多种形态&#xff0c;使用多态能够使得不同的对象去完成同一件事时&#xff0c;产生不同的动作和结果。 举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学生买票时&#xff0c;是半价买…

yolov5网络初始化问题

当你打印detect层的三个特征层时&#xff0c;发现有三种不同的长和宽&#xff0c;如下图所示&#xff1a; 我提出三个问题&#xff1a; 为什么不一样呢&#xff0c;输入有什么含义吗&#xff1f; 为什么网络初始化四次&#xff08;forward)&#xff1f; 下面来逐个击破 1. torc…

uniapp 微信小程序生成水印图片

效果 源码 <template><view style"overflow: hidden;"><camera device-position"back" flash"auto" class"camera"><cover-view class"text-white padding water-mark"><cover-view class"…

【笔记】泰山派环境配置遇到E: Unable to locate package repo

答案来自通义千问&#xff0c;解决了我的问题&#xff0c;做一些记录 你尝试在Ubuntu或Debian系统上使用apt命令安装repo工具&#xff0c;但是遇到了问题&#xff0c;因为repo不是直接在软件源中作为一个独立的包提供的。repo是Google的一个Git仓库管理工具&#xff0c;通常用…

EasyCVR视频汇聚平台:打造全栈视频监控系统的基石,解锁可视化管理与高效运维

随着科技的飞速发展&#xff0c;视频监控已成为现代社会不可或缺的一部分&#xff0c;广泛应用于社区、公共场所、工业领域等多个场景。EasyCVR视频汇聚平台&#xff0c;作为一款高性能的视频汇聚管理平台&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;在构建全…

数据结构——关于栈

1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则 比如&#xff1a;羽毛球桶&#xff0c;弹夹等等 压…

苍穹外卖项目DAY05

苍穹外卖项目DAY05 1、店铺营业状态设置 1.1、Redis入门 Redis简介 Redis是一个基于内存的key-value结构数据库 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、咨询、新闻&#xff09;企业应用广泛 中文网&#xff1a;https://www.redis.net…

【Java学习】Stream流详解

所属专栏&#xff1a;Java学习 Stream流是JDK 8引入的一个概念&#xff0c;它提供了一种高效且表达力强的方式来处理数据集合&#xff08;如List、Set等&#xff09;或数组。Stream API可以以声明性方式&#xff08;指定做什么&#xff09;来处理数据序列。流操作可以被分为两大…

[C++][opencv]基于opencv实现photoshop算法灰度化图像

测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 BlackWhite.hpp #ifndef OPENCV2_PS_BLACKWHITE_HPP_ #define OPENCV2_PS_BLACKWHITE_HPP_#include "opencv2/core.hpp"namespace cv {class BlackWhite { public:float red; //红色的灰度系…

阿里云ubuntu系统安装mysql8.0

一、安装mysql8.0 1.已安装其他版本的mysql&#xff0c;需要删除 若没有不需要此操作 1 #卸载MySQL5.7版本 2 apt remove -y mysql-client5.7* mysql-community-server5.7* 4 # 卸载5.7的仓库信息 5 dpkg-l | grep mysql | awk iprint $2} | xargs dpkg -P2.更新仓库 apt u…

Python酷库之旅-第三方库Pandas(084)

目录 一、用法精讲 351、pandas.Series.str.isdigit方法 351-1、语法 351-2、参数 351-3、功能 351-4、返回值 351-5、说明 351-6、用法 351-6-1、数据准备 351-6-2、代码示例 351-6-3、结果输出 352、pandas.Series.str.isspace方法 352-1、语法 352-2、参数 3…

0815,析构函数,拷贝构造函数,赋值运算符函数

来自同济医院的问候 目录 01&#xff1a;对象创建 001.cc 003size.cc 02&#xff1a;对象销毁 004pointer.cc 005destroytime.cc 03&#xff1a;本类型对象的复制 3.1 拷贝构造函数 006cp.cc 007cptime.cc 008recursion.cc 009rightleft.cc 3.2 赋值运算符函数 …

平安城市/雪亮工程现状及需求分析:EasyCVR视频汇聚平台助力雪亮工程项目建设

一、背景现状 经过近几年的努力&#xff0c;平安城市雪亮工程建设取得了显著的成绩&#xff0c;完成了前端高清视频点位和高清卡口系统建设&#xff0c;建成了&#xff08;视频监控类&#xff09;、&#xff08;卡口类&#xff09;和&#xff08;应用类&#xff09;的平台。这…

BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction

中文题目: 英文题目: BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction 论文地址: aclanthology.org/2024.acl-long.460.pdf 代码地址: https://github.com/byinhao/BvSP 论文级别&#xff0c; 单位: (2024 ACL long paper) 南开大学&#xff0…