鸿蒙Sample项目实战开发:分布式粘贴板

1.介绍

HarmonyOS提供系统剪贴板服务的操作接口,支持用户程序从系统剪贴板中读取、写入和查询剪贴板数据,以及添加、移除系统剪贴板数据变化的回调。
设备内:
用户通过系统剪贴板服务,可实现应用之间的简单数据传递。例如:在应用A中复制的数据,可以在应用B中粘贴,反之亦可。
设备间:
在分布式粘贴板场景中,粘贴的数据可以跨设备写入。例如,设备A上的应用程序使用系统粘贴板接口将从设备A复制的数据通过IDL接口存储到设备B的系统粘贴板中。如果数据允许,设备B上的应用程序可以读取并粘贴系统粘贴板中的复制数据。实现设备之间粘贴板的分布式协同。

基于以上理解,实现一个分布式粘贴板应用程序,应用程序分为客户端(copy)和服务端(paste)两部分,通过idl实现数据传递。
客户端负责数据采集,服务端负责数据的展示和应用,客户端和服务端可以安装在同一台设备中,也可以安装在不同的设备中,服务端也可以按照在多台设备中,服务端通过分布式数据库实现粘贴板数据的自动同步。

2.效果展示

HarmonyOS Sample 之 Pasteboard 分布式粘贴板-鸿蒙开发者社区

HarmonyOS Sample 之 Pasteboard 分布式粘贴板-鸿蒙开发者社区

3.搭建环境

安装DevEco Studio,​ 详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:

​如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。 如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。 下载源码后,使用DevEco Studio 打开项目,模拟器运行即可。 真机运行需要将config.json中的buddleName修改为自己的,如果没有请到AGC上进行配置,参见 使用模拟器进行调试 。

4.项目结构

HarmonyOS Sample 之 Pasteboard 分布式粘贴板-鸿蒙开发者社区

HarmonyOS Sample 之 Pasteboard 分布式粘贴板-鸿蒙开发者社区

5.代码讲解

5.1 系统粘贴板基础功能介绍

系统粘贴板对象介绍
1.SystemPasteboard //系统粘贴板对象,定义系统粘贴板操作,包括复制、粘贴和设置粘贴板内容更改的侦听器。
2.PasteData//表示粘贴板上的粘贴数据。
3.PasteData.DataProperty //该类定义了系统粘贴板上 PasteData 的属性,包括时间戳、MIME 类型和其他属性数据。
4.PasteData.Record//该类将单个粘贴的数据定义为 Record,它可以是纯文本、HTML 文本、URI 和意图。 PasteData 对象包含一个或多个记录。

客户端(copy)CopyAbilitySlice.java
获取系统粘贴板,监听粘贴板数据变化

/**
 * 获取系统粘贴板
 * 监听粘贴板数据变化
 */
private void initPasteboard() {
    HiLog.debug(LABEL, "initPasteboard");
    //获取系统粘贴板对象
    pasteboard = SystemPasteboard.getSystemPasteboard(this);
    //监听粘贴板数据变化
    pasteboard.addPasteDataChangedListener(() -> {
        if (pasteboard.hasPasteData()) {
            sync_text = getPasteData();
            HiLog.debug(LABEL, "%{public}s", "pasteStr:" + sync_text);
        }
    });
}

获取粘贴板内容


/**
 * 获取粘贴板记录
 *
 * @return
 */
private String getPasteData() {
    HiLog.debug(LABEL, "getPasteData");
    String result = "";

    //粘贴板数据对象
    PasteData pasteData = pasteboard.getPasteData();
    if (pasteData == null) {
        return result;
    }
    PasteData.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++) {
            //粘贴板数据记录
            PasteData.Record record = pasteData.getRecordAt(i);
            //不同类型获取方式不同
            String mimeType = record.getMimeType();
            //HTML文本
            if (mimeType.equals(PasteData.MIMETYPE_TEXT_HTML)) {
                result = record.getHtmlText();
                //纯文本
            } else if (mimeType.equals(PasteData.MIMETYPE_TEXT_PLAIN)) {
                result = record.getPlainText().toString();
                //
            } else {
                HiLog.info(LABEL, "%{public}s", "getPasteData mimeType :" + mimeType);
            }
        }
    }
    return result;
}

设置文本到粘贴板中

/**
 * 设置文本到粘贴板
 *
 * @param component
 */
private void setTextToPaste(Component component) {
    HiLog.info(LABEL, "setTextToPaste");
    if (pasteboard != null) {
        String text = syncText.getText();
        if (text.isEmpty()) {
            showTips(this, "请填写内容");
            return;
        }
        //把记录添加到粘贴板
        PasteData pasteData=  PasteData.creatPlainTextData(text);
        //设置文本到粘贴板
        pasteboard.setPasteData(pasteData)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值