鸿蒙OS 剪贴板

鸿蒙OS 剪贴板概述

用户通过系统剪贴板服务,可实现应用之间的简单数据传递
HarmonyOS 提供系统剪贴板服务的操作接口,支持用户程序从系统剪贴板中读取、写入和查询剪贴板数据,以及添加、移除系统剪贴板数据变化的回调。
HarmonyOS 提供剪贴板数据的对象定义,包含内容对象和属性对象。
HarmonyOS 支持跨设备分布式剪贴板服务。

鸿蒙OS 剪贴板开发指导

同一设备的应用程序 A、B 之间可以借助系统剪贴板服务完成简单数据的传递,即应用程序 A 向剪贴板服务写入数据后,应用程序 B 可以从中读取出数据。在满足分布式剪贴板服务的使用条件时,应用程序 A、B 也可以来自组网内的不同设备。
在这里插入图片描述

在使用剪贴板服务时,需要注意以下几点:

只有在前台获取到焦点的应用才有读取系统剪贴板的权限(系统默认输入法应用除外)。
写入到剪贴板服务中的剪贴板数据不会随应用程序结束而销毁。
对同一用户而言,写入剪贴板服务的数据会被下一次写入的剪贴板数据所覆盖。
如果设备满足分布式组网条件,且进行复制操作的设备打开了剪贴板分布式开关,未配置“仅在本地”标志位的剪贴板数据里的 MIME 类型为纯文本和 HTML 的内容可以被组网内其他打开了剪贴板分布式开关的设备粘贴出来。
在同一设备内,剪贴板单次传递内容不应超过 800KB。在分布式场景下多设备间传递时,每次传递内容不应超过 64KB。

接口说明
SystemPasteboard 提供系统剪贴板操作的相关接口,比如复制、粘贴、配置回调等。PasteData 是剪贴板服务操作的数据对象,一个 PasteData 由若干个内容节点(PasteData.Record)和一个属性集合对象(PasteData.DataProperty)组成。Record 是存放剪贴板数据内容信息的最小单位,每个 Record 都有其特定的 MIME 类型,如纯文本、HTML、URI、Intent。剪贴板数据的属性信息存在放 DataProperty 中,包括标签、时间戳、“仅在本地”标记位等。

SystemPasteboard

SystemPasteboard 提供系统剪贴板服务的操作接口,比如复制、粘贴、配置回调等。

在这里插入图片描述

PasteData

PasteData 是剪贴板服务操作的数据对象,其中内容节点定义为 PasteData.Record,属性集合定义为PasteData.DataProperty。

在这里插入图片描述在这里插入图片描述

PasteData.DataProperty

每个 PasteData 中都有一个 PasteData.DataProperty 成员,其中存放着该数据对象的属性集合,例如自定义标签、MIME 类型集合列表,“仅在本地”标记位等。

在这里插入图片描述

IPasteDataChangedListener

IPasteDataChangedListener 是定义剪贴板数据变化回调的接口类,开发者需要实现此接口来编码触发回调时的处理逻辑。

在这里插入图片描述

开发步骤
应用A获取系统剪贴板服务。

SystemPasteboard pasteboard = SystemPasteboard.getSystemPasteboard(appContext);

应用A向系统剪贴板中写入一条纯文本数据。

  if (pasteboard != null) {
       pasteboard.setPasteData(PasteData.creatPlainTextData("Hello, world!"));
   }

应用 B 从系统剪贴板读取数据,将数据对象中的首个文本类型(纯文本/HTML)内容信息在控件中显示,忽略其他类型内容。

  PasteData pasteData = pasteboard.getPasteData();
   if (pasteData == null) {
       return;
   }
   DataProperty dataProperty = pasteData.getProperty();
   boolean hasHtml = dataProperty.hasMimeType(PasteData.MIMETYPE_TEXT_HTML);
   boolean hasText = dataProperty.hasMimeType(PasteData.MIMETYPE_TEXT_PLAIN);
   if (hasHtml || hasText) {
       for (int i = 0; i < pasteData.getRecordCount(); i++) {
           Record record = pasteData.getRecordAt(i);
           String mimeType = record.getMimeType();
           if (mimeType.equals(PasteData.MIMETYPE_TEXT_HTML)) {
               text.setText(record.getHtmlText());
               break;
           } else if (mimeType.equals(PasteData.MIMETYPE_TEXT_PLAIN)) {
               text.setText(record.getPlainText().toString());
               break;
           }
       }
   }

应用 C 注册添加系统剪贴板数据变化回调,当系统剪贴板数据发生变化时触发处理逻辑。

  IPasteDataChangedListener listener = new IPasteDataChangedListener() {
       
       public void onChanged() {
           PasteData pasteData = pasteboard.getPasteData();
           if (pasteData == null) {
               return;
           }
           // Operations to handle data change on the system pasteboard
       }
   };
   pasteboard.addPasteDataChangedListener(listener);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马里亚纳海沟网

你的打赏是我最大鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值