一、剪贴板概述

  • 用户通过系统剪贴板服务,可实现应用之间的简单数据传递。例如:在应用 A 中复制的数据,可以在应用 B 中粘贴,反之亦可。
  • HarmonyOS 提供系统剪贴板服务的操作接口,支持用户程序从系统剪贴板中读取、写入和查询剪贴板数据,以及添加、移除系统剪贴板数据变化的回调。
  • HarmonyOS 提供剪贴板数据的对象定义,包含内容对象和属性对象。

二、使用场景

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

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

三、API 说明

① 剪贴板 API
  • SystemPasteboard 提供系统剪贴板操作的相关接口,比如复制、粘贴、配置回调等。
  • PasteData 是剪贴板服务操作的数据对象,一个 PasteData 由若干个内容节点(PasteData.Record)和一个属性集合对象(PasteData.DataProperty)组成。
  • Record 是存放剪贴板数据内容信息的最小单位,每个 Record 都有其特定的 MIME 类型,如纯文本、HTML、URI、Intent。
  • 剪贴板数据的属性信息存在放 PasteData.DataProperty 中,包括标签、时间戳等。
② SystemPasteboard
  • SystemPasteboard 提供系统剪贴板服务的操作接口,比如复制、粘贴、配置回调等。
  • SystemPasteboard 的主要接口如下表所示:
接口名 描述
getSystemPasteboard(Context context) 获取系统剪切板服务的对象实例
getPasteData() 读取当前系统剪贴板中的数据
hasPasteData() 判断当前系统剪贴板中是否有内容
setPasteData(PasteData data) 将剪贴板数据写入到系统剪贴板
clear() 清空系统剪贴板数据
addPasteDataChangedListener(IPasteDataChangedListener listener) 用户程序添加系统剪贴板数据变化的回调,当系统剪贴板数据发生变化时,会触发用户程序的回调实现
removePasteDataChangedListener(IPasteDataChangedListener listener) 用户程序移除系统剪贴板数据变化的回调
② PasteData
  • PasteData 是剪贴板服务操作的数据对象,其中内容节点定义为 PasteData.Record,属性集合定义为 PasteData.DataProperty。
  • PasteData 的主要接口如下表所示:
接口名 描述
PasteData() 构造器,创建一个空内容数据对象
creatPlainTextData(CharSequence text) 构建一个包含纯文本内容节点的数据对象
creatHtmlData(String htmlText) 构建一个包含HTML内容节点的数据对象
creatUriData(Uri uri) 构建一个包含URI内容节点的数据对象
creatIntentData(Intent intent) 构建一个包含Intent内容节点的数据对象
getPrimaryMimeType() 获取数据对象中首个内容节点的MIME类型,如果没有查询到内容,将返回一个空字符串
getPrimaryText() 获取数据对象中首个内容节点的纯文本内容,如果没有查询到内容,将返回一个空对象
addTextRecord(CharSequence text) 向数据对象中添加一个纯文本内容节点,该方法会自动更新数据属性中的MIME类型集合,最多只能添加128个内容节点
addRecord(Record record) 向数据对象中添加一个内容节点,该方法会自动更新数据属性中的MIME类型集合,最多只能添加128个内容节点
getRecordCount() 获取数据对象中内容节点的数量
getRecordAt(int index) 获取数据对象在指定下标处的内容节点,如果操作失败会返回空对象
removeRecordAt(int index) 移除数据对象在指定下标处的内容节点,如果操作成功会返回true,操作失败会返回false
getMimeTypes() 获取数据对象中上所有内容节点的MIME类型列表,当内容节点为空时,返回列表为空对象
getProperty() 获取该数据对象的属性集合成员
  • PasteData 中定义的常量如下:
变量名 描述
MIMETYPE_TEXT_PLAIN= “text/plain” 纯文本的MIME类型定义
MIMETYPE_TEXT_HTML= “text/html” HTML的MIME类型定义
MIMETYPE_TEXT_URI= “text/uri” URI的MIME类型定义
MIMETYPE_TEXT_INTENT= “text/ohos.intent” Intent的MIME类型定义
MAX_RECORD_NUM=128 单个PasteData中所能包含的Record的数量上限
③ PasteData.Record
  • 一个 PasteData 中包含若干个特定 MIME 类型的 PasteData.Record,每个 Record 是存放剪贴板数据内容信息的最小单位。
  • PasteData.Record 的主要接口如下所示:
接口名 描述
createPlainTextRecord(CharSequence text) 构造一个MIME类型为纯文本的内容节点
createHtmlTextRecord(String htmlText) 构造一个MIME类型为HTML的内容节点
createUriRecord(Uri uri) 构造一个MIME类型为URI的内容节点
createIntentRecord(Intent intent) 构造一个MIME类型为Intent的内容节点
getPlainText() 获取该内容节点中的文本内容,如果没有内容将返回空对象
getHtmlText() 获取该内容节点中的HTML内容,如果没有内容将返回空对象
getUri() 获取该内容节点中的URI内容,如果没有内容将返回空对象
getIntent() 获取该内容节点中的Intent内容,如果没有内容将返回空对象
getMimeType() 获取该内容节点的MIME类型
convertToText(Context context) 将该内容节点的内容转为文本形式
④ PasteData.DataProperty
  • 每个 PasteData 中都有一个 PasteData.DataProperty 成员,其中存放着该数据对象的属性集合,例如自定义标签、MIME 类型集合列表等。
  • PasteData.DataProperty 的主要接口如下:
接口名 描述
getMimeTypes() 获取所属数据对象的MIME类型集合列表,当内容节点为空时,返回列表为空对象
hasMimeType(String mimeType) 判断所属数据对象中是否包含特定MIME类型的内容
getTimestamp() 获取所属数据对象被写入系统剪贴板时的时间戳,如果该数据对象尚未被写入,则返回0
setTag(CharSequence tag) 设置自定义标签
getTag() 获取自定义标签
setAdditions(PacMap extraProps) 设置一些附加键值对信息
getAdditions() 获取附加键值对信息
⑤ IPasteDataChangedListener
  • IPasteDataChangedListener 是定义剪贴板数据变化回调的接口类,开发者需要实现此接口来编码触发回调时的处理逻辑。
  • IPasteDataChangedListener 的主要接口如下:
接口名 描述
onChanged() 当系统剪贴板数据发生变化时的回调接口

四、使用流程

  • 应用 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() {@Overridepublic void onChanged() {PasteData pasteData = pasteboard.getPasteData();if (pasteData == null) {return;}// Operations to handle data change on the system pasteboard}};pasteboard.addPasteDataChangedListener(listener);

HarmonyOS之剪贴板的功能和使用相关推荐

  1. 新版XenCenter添加剪贴板共享功能

    今天测试了下XenServer5.6 SP2,老版本的XenCenter已经不能连接新版本XenServer了,于是升级到了最新版:XenCenter version 5.6 Service Pack ...

  2. 设置silverlight启用剪贴板的功能

    好久没写博客了,废话不多说,我来说说我最近遇到的奇葩问题,那就是给Silverlight设置启用剪贴板的功能,第一次启用的时候Silverlight会问你允不允许启用,好了,这就是关键了,基本上很多人 ...

  3. 鸿蒙系统内核学习笔记(一)-HarmonyOS 轻内核基础功能

    1.1 进程 1.1.1 基本概念 从系统的角度看,进程是资源管理单元.进程可以使用或等待 CPU.使用内存空间等系统资源,并独立于其它进程运行. HarmonyOS 内核的进程模块可以给用户提供多个 ...

  4. 【转】js实现复制到剪贴板功能,兼容所有浏览器

    2019独角兽企业重金招聘Python工程师标准>>> 两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家 ...

  5. HarmonyOS之设备传感器的功能和使用

    一.基本概念 HarmonyOS 传感器是应用访问底层硬件传感器的一种设备抽象概念.开发者根据传感器提供的 Sensor API,可以查询设备上的传感器,订阅传感器的数据,并根据传感器数据定制相应的算 ...

  6. jquery粘贴按钮_实现前端点击按钮自动复制剪贴板功能

    [目录] 明确需求 html分析 代码实现 css分析 js分析 代码实现 只要是文本,长按选中就可以复制,但是需求来了挡也挡不住: 明确需求 为了提升用户体验,点击[复制]按钮就自动复制到剪贴板,那 ...

  7. ios开发读取剪切板的内容_iOS开发_iphone 实现剪贴板操作_iphone 复制粘贴功能(转)...

    在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享.比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容. 一.在iOS中下面三个控件, ...

  8. html5 复制到剪贴板 兼容,JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

  9. iOS开发_iphone 实现剪贴板操作_iphone 复制粘贴功能

    在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享.比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容. 一.在iOS中下面三个控件, ...

最新文章

  1. win10 计算机休眠后无法唤醒,win10休眠后无法唤醒怎么办 win10系统怎么设置休眠时间...
  2. 从数据库中取出数据表,导入并生成excel
  3. C语言车辆管理报告,用c语言编的车辆管理
  4. python actor_Python定义一个Actor任务
  5. Lesson 3 Part 1 Locally weighted regression
  6. (转)如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
  7. Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创...
  8. filter动态参数 maven_多环境下Maven项目的管理
  9. paip.提升用户体验---c++ QPushButton按钮控件透明以及不规则按钮以及 鼠标越过动态设置
  10. 新手如何发网站外链,网站的外链如何发,发外链的方法集合
  11. $route.matched
  12. PIBOT移植ROS2记录(2)-添加Node与cmd_vel
  13. python枚举是什么意思_什么是枚举python
  14. Maven报错Original error: Could not transfer artifact
  15. el-checkbox多选框点击第一次不能勾选,第二次才会勾选
  16. 【Activiti7】什么是工作流?
  17. 英文短语缩写问题 1199 getline()使用
  18. 分手了还能做朋友吗?(2012年2月22日)
  19. 华为战略部门研究山寨机决定出售手机部门
  20. 360软件管家怎么下载python_​再见,360安全卫士

热门文章

  1. 好程序员分享Java开发常用规范技巧二
  2. 推荐11个实用Python库
  3. python打怪之路【第二篇】:ImportError: No module named setuptools
  4. asp.net MVC分页
  5. Xcode 升级后,cocoaPod 问题
  6. android_launcher的源码详细分析
  7. php sort_flags
  8. 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。
  9. Windows下用Mingw编译Boost.Regex库
  10. 关于Xbox live及其在中国的使用