HarmonyOS Sample 之 Pasteboard 分布式粘贴板 原创 精华
本文正在参与优质创作者激励
目录
HarmonyOS Sample 之 Pasteboard 分布式粘贴板
1.介绍
HarmonyOS提供系统剪贴板服务的操作接口,支持用户程序从系统剪贴板中读取、写入和查询剪贴板数据,以及添加、移除系统剪贴板数据变化的回调。
设备内:
用户通过系统剪贴板服务,可实现应用之间的简单数据传递。例如:在应用A中复制的数据,可以在应用B中粘贴,反之亦可。
设备间:
在分布式粘贴板场景中,粘贴的数据可以跨设备写入。例如,设备A上的应用程序使用系统粘贴板接口将从设备A复制的数据通过IDL接口存储到设备B的系统粘贴板中。如果数据允许,设备B上的应用程序可以读取并粘贴系统粘贴板中的复制数据。实现设备之间粘贴板的分布式协同。
基于以上理解,实现一个分布式粘贴板应用程序,应用程序分为客户端(copy)和服务端(paste)两部分,通过idl实现数据传递。
客户端负责数据采集,服务端负责数据的展示和应用,客户端和服务端可以安装在同一台设备中,也可以安装在不同的设备中,服务端也可以按照在多台设备中,服务端通过分布式数据库实现粘贴板数据的自动同步。
2.效果展示
3.搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
下载源码后,使用DevEco Studio 打开项目,模拟器运行即可。
真机运行需要将config.json中的buddleName修改为自己的,如果没有请到AGC上进行配置,参见 使用模拟器进行调试 。
4.项目结构
5.代码讲解
5.1 系统粘贴板基础功能介绍
系统粘贴板对象介绍
1.SystemPasteboard //系统粘贴板对象,定义系统粘贴板操作,包括复制、粘贴和设置粘贴板内容更改的侦听器。
2.PasteData//表示粘贴板上的粘贴数据。
3.PasteData.DataProperty //该类定义了系统粘贴板上 PasteData 的属性,包括时间戳、MIME 类型和其他属性数据。
4.PasteData.Record//该类将单个粘贴的数据定义为 Record,它可以是纯文本、HTML 文本、URI 和意图。 PasteData 对象包含一个或多个记录。
客户端(copy)CopyAbilitySlice.java
获取系统粘贴板,监听粘贴板数据变化
获取粘贴板内容
设置文本到粘贴板中
清空粘贴板
5.2 分布式粘贴板应用构建思路介绍
选择远端连接设备
本实例是通过新增加一个DevicesSelectAbility来实现的。
连接粘贴板服务端ServiceAbility服务
idl文件放在ohos.samples.pasteboard.paste目录下,
Gradl窗口,执行compileDebugIdl 后,系统生成代理对象。
连接服务端ServiceAbility,如果组网中没有其他设备就连接本地的服务端。
连接成功后,初始化idl的SharePasteAgentProxy代理,用于下一步的同步数据。
同步数据到服务端
随机生成粘贴文本
服务端(paste)ServiceAbility.java
设置粘贴板服务
idl文件放在ohos.samples.pasteboard.paste目录下,
Gradl窗口,执行compileDebugIdl 后,系统生成代理对象,idl提供了setSystemPaste接口供远端调用。
初始化数据列表
标签分类显示
搜索粘贴记录
分布式数据库工具KvManagerUtils.java
数据变化通知
提供了分布式数据库管理工具KvManagerUtils.java,数据库操作都集中在这里了。
为了在数据库数据发生变化时能及时更新页面显示,页面在初始化数据库时,传递eventHandler对象,这样在数据库变化是可以通知到页面。
数据自动同步
默认开启自动同步
权限config.json
6.思考总结
1.粘贴板板传递数据可能会存在安全问题,需要注意,要根据具体场景来使用。
设备内每次传输的粘贴数据大小不能超过 800 KB。每次设备间传输的数据不能超过64KB,且数据必须为文本格式。
2.idl的使用,在上述案例中,客户端(copy) 和 服务端(paste) 项目idl下内容完全一致即可。
![]() |
![]() |
7.完整代码
附件可以直接下载
楼主这篇文章的项目真的能在生活中解决很多问题。
这个项目很好的体现了分布式数据库的完美应用啊,很方便啊。
深有体会,粘贴板传递数据确实容易出很多问题,文章很有用
学到了
get!