文档管理中心
您当前浏览的HarmonyOS 5.0.0(API 12)文档归档不再维护,推荐您使用最新版本。详细请参考文档维护策略变更
指南系统基础功能Basic Services Kit(基础服务)剪贴板服务使用剪贴板进行延迟复制粘贴

使用剪贴板进行延迟复制粘贴

场景介绍

剪贴板服务主要提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持。

反复执行复制操作时,剪贴板缓存中会存储多余数据从而导致内存增加,为了优化内存以及后续支持指定数据类型粘贴,剪贴板提供了延迟复制粘贴的功能。

用户复制使用延迟粘贴技术的应用内的数据时,该条真实数据不会立即写入剪贴板服务的缓存中,而是等需要粘贴时,再从应用获取数据。

约束限制

  • 剪贴板内容大小<128MB时支持使用。

接口说明

展开
名称 说明
setUnifiedData(data: udc.UnifiedData): Promise<void> 将统一数据类型的数据写入系统剪贴板,在使用延迟复制粘贴功能时,不可与getUnifiedDataSync同线程调用。
setUnifiedDataSync(data: udc.UnifiedData): void 将统一数据类型的数据写入系统剪贴板,此接口为同步接口,在使用延迟复制粘贴功能时,不可与getUnifiedDataSync同线程调用。
getUnifiedData(): Promise<udc.UnifiedData> 从系统剪贴板中读取统一数据类型的数据。
getUnifiedDataSync(): udc.UnifiedData 从系统剪贴板中读取统一数据类型的数据,此接口为同步接口,在使用延迟复制粘贴功能时,不可与setUnifiedData和setUnifiedDataSync同线程调用。

开发步骤

  1. 导入pasteboard,unifiedDataChannel和uniformTypeDescriptor模块。

    收起
    自动换行
    深色代码主题
    复制
    1. import {unifiedDataChannel, uniformTypeDescriptor} from '@kit.ArkData';
    2. import {BusinessError, pasteboard} from '@kit.BasicServicesKit'
  2. 构造一条PlainText数据,并书写获取延时数据的函数。

    收起
    自动换行
    深色代码主题
    复制
    1. let plainTextData = new unifiedDataChannel.UnifiedData();
    2. let GetDelayPlainText = ((dataType:string) => {
    3. let plainText = new unifiedDataChannel.PlainText();
    4. plainText.details = {
    5. Key: 'delayPlaintext',
    6. Value: 'delayPlaintext',
    7. };
    8. plainText.textContent = 'delayTextContent';
    9. plainText.abstract = 'delayTextContent';
    10. plainTextData.addRecord(plainText);
    11. return plainTextData;
    12. });
  3. 向系统剪贴板中存入一条PlainText数据。

    收起
    自动换行
    深色代码主题
    复制
    1. let SetDelayPlainText = (() => {
    2. plainTextData.properties.shareOptions = unifiedDataChannel.ShareOptions.CROSS_APP;
    3. // 跨应用使用时设置为CROSS_APP,本应用内使用时设置为IN_APP
    4. plainTextData.properties.getDelayData = GetDelayPlainText;
    5. pasteboard.getSystemPasteboard().setUnifiedData(plainTextData).then(()=>{
    6. // 存入成功,处理正常场景
    7. }).catch((error: BusinessError) => {
    8. // 处理异常场景
    9. });
    10. })
  4. 从系统剪贴板中读取这条text数据。

    收起
    自动换行
    深色代码主题
    复制
    1. let GetPlainTextUnifiedData = (() => {
    2. pasteboard.getSystemPasteboard().getUnifiedData().then((data) => {
    3. let outputData = data;
    4. let records = outputData.getRecords();
    5. if (records[0].getType() == uniformTypeDescriptor.UniformDataType.PLAIN_TEXT) {
    6. let record = records[0] as unifiedDataChannel.PlainText;
    7. console.log('GetPlainText success, type:' + records[0].getType + ', details:' +
    8. JSON.stringify(record.details) + ', textContent:' + record.textContent + ', abstract:' + record.abstract);
    9. } else {
    10. console.log('Get Plain Text Data No Success, Type is: ' + records[0].getType());
    11. }
    12. }).catch((error: BusinessError) => {
    13. //处理异常场景
    14. })
    15. })
在 指南 中进行搜索
请输入您想要搜索的关键词