鸿蒙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);