• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   ```