1# 使用剪贴板进行延迟复制粘贴 2 3## 场景介绍 4 5[剪贴板服务](../../reference/apis-basic-services-kit/js-apis-pasteboard.md)主要提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持。 6 7反复执行复制操作时,剪贴板缓存中会存储多余数据从而导致内存增加,为了优化内存以及后续支持指定数据类型粘贴,剪贴板提供了延迟复制粘贴的功能。 8 9用户复制使用延迟粘贴技术的应用内的数据时,该条真实数据不会立即写入剪贴板服务的缓存中,而是等需要粘贴时,再从应用获取数据。 10 11## 约束限制 12 13- 剪贴板内容大小<128MB时支持使用。 14 15## 接口说明 16 17| 名称 | 说明 | 18| -------- |----------------------------------------------------------------------| 19| setUnifiedData(data: udc.UnifiedData): Promise\<void> | 将统一数据类型的数据写入系统剪贴板,在使用延迟复制粘贴功能时,不可与getUnifiedDataSync同线程调用。| 20| setUnifiedDataSync(data: udc.UnifiedData): void | 将统一数据类型的数据写入系统剪贴板,此接口为同步接口,在使用延迟复制粘贴功能时,不可与getUnifiedDataSync同线程调用。| 21| getUnifiedData(): Promise\<udc.UnifiedData> | 从系统剪贴板中读取统一数据类型的数据。| 22| getUnifiedDataSync(): udc.UnifiedData | 从系统剪贴板中读取统一数据类型的数据,此接口为同步接口,在使用延迟复制粘贴功能时,不可与setUnifiedData和setUnifiedDataSync同线程调用。| 23 24## 开发步骤 25 261. 导入pasteboard,unifiedDataChannel和uniformTypeDescriptor模块。 27 28 ```ts\ 29 import {unifiedDataChannel, uniformTypeDescriptor} from '@kit.ArkData'; 30 import {BusinessError, pasteboard} from '@kit.BasicServicesKit' 31 ``` 32 332. 构造一条PlainText数据,并书写获取延时数据的函数。 34 35 ```ts 36 let plainTextData = new unifiedDataChannel.UnifiedData(); 37 let GetDelayPlainText = ((dataType:string) => { 38 let plainText = new unifiedDataChannel.PlainText(); 39 plainText.details = { 40 Key: 'delayPlaintext', 41 Value: 'delayPlaintext', 42 }; 43 plainText.textContent = 'delayTextContent'; 44 plainText.abstract = 'delayTextContent'; 45 plainTextData.addRecord(plainText); 46 return plainTextData; 47 }); 48 ``` 49 503. 向系统剪贴板中存入一条PlainText数据。 51 52 ```ts 53 let SetDelayPlainText = (() => { 54 plainTextData.properties.shareOptions = unifiedDataChannel.ShareOptions.CROSS_APP; 55 // 跨应用使用时设置为CROSS_APP,本应用内使用时设置为IN_APP 56 plainTextData.properties.getDelayData = GetDelayPlainText; 57 pasteboard.getSystemPasteboard().setUnifiedData(plainTextData).then(()=>{ 58 // 存入成功,处理正常场景 59 }).catch((error: BusinessError) => { 60 // 处理异常场景 61 }); 62 }) 63 ``` 64 654. 从系统剪贴板中读取这条text数据 66 67 ```ts 68 let GetPlainTextUnifiedData = (() => { 69 pasteboard.getSystemPasteboard().getUnifiedData().then((data) => { 70 let outputData = data; 71 let records = outputData.getRecords(); 72 if (records[0].getType() == uniformTypeDescriptor.UniformDataType.PLAIN_TEXT) { 73 let record = records[0] as unifiedDataChannel.PlainText; 74 console.log('GetPlainText success, type:' + records[0].getType + ', details:' + 75 JSON.stringify(record.details) + ', textContent:' + record.textContent + ', abstract:' + record.abstract); 76 } else { 77 console.log('Get Plain Text Data No Success, Type is: ' + records[0].getType()); 78 } 79 }).catch((error: BusinessError) => { 80 //处理异常场景 81 }) 82 }) 83 ```