HarmonyOS —剪贴板开发指导

HarmonyOS —剪贴板开发指导

场景介绍

同一设备的应用程序A、B之间可以借助系统剪贴板服务完成简单数据的传递,即应用程序A向剪贴板服务写入数据后,应用程序B可以从中读取出数据。

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

  • 只有在前台获取到焦点的应用才有读取系统剪贴板的权限(系统默认输入法应用除外)。
  • 写入到剪贴板服务中的剪贴板数据不会随应用程序结束而销毁。
  • 对同一用户而言,写入剪贴板服务的数据会被下一次写入的剪贴板数据所覆盖。
  • 在同一设备内,剪贴板单次传递内容不应超过500KB。

接口说明

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

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

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

IPasteDataChangedListener

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

开发步骤

  1. 应用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) {
    Text text = (Text) findComponentById(ResourceTable.Id_text);
    for (int i = 0; i < pasteData.getRecordCount(); i++) {
        PasteData.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;
        } else {
            // skip records of other Mime type 
        }
    }
}

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

IPasteDataChangedListener listener = new IPasteDataChangedListener() {
    @Override
    public void onChanged() {
        PasteData pasteData = pasteboard.getPasteData();
        if (pasteData == null) {
            return;
        }
        // Operations to handle data change on the system pasteboard
    }
};
pasteboard.addPasteDataChangedListener(listener);

相关实例

针对剪贴板开发指导,有以下示例工程可供参考:

  • Pasteboard本示例演示了应用之间的数据剪贴。
0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x