网站建设sem账户搭建网站侧边 跟随 样式
2026/5/21 18:19:17 网站建设 项目流程
网站建设sem账户搭建,网站侧边 跟随 样式,开网店怎么开 新手,建投商务网登录本文同步发表于我的微信公众号#xff0c;微信搜索 程语新视界 即可关注#xff0c;每个工作日都有文章更新 在鸿蒙#xff08;HarmonyOS#xff09;中实现复制粘贴功能需使用kit.BasicServicesKit的剪贴板服务#xff1a; 一、约束限制 容量限制#xff1a; 剪贴板内容…本文同步发表于我的微信公众号微信搜索程语新视界即可关注每个工作日都有文章更新在鸿蒙HarmonyOS中实现复制粘贴功能需使用kit.BasicServicesKit的剪贴板服务一、约束限制容量限制剪贴板内容总大小默认为128MBPC/二合一设备可通过系统配置调整上限范围为128MB至2GB操作限制为保证数据准确性同一时间只能支持一个复制操作权限管控从API version 12开始剪贴板读取接口增加了权限管控以提升用户隐私安全保护权限要求API version 12读取剪贴板需申请权限ohos.permission.READ_PASTEBOARD在module.json5中添加requestPermissions: [{ name: ohos.permission.READ_PASTEBOARD }]二、支持的数据类型剪贴板支持两种方式处理数据一基础数据类型支持以下五种基础数据类型文本text/plainHTMLtext/htmlURItext/uriWanttext/wantPixelMappixelMapArkTS与NDK接口数据类型对应关系ArkTS数据类型NDK数据类型MIMETYPE_PIXELMAPUDMF_META_OPENHARMONY_PIXEL_MAPMIMETYPE_TEXT_HTMLUDMF_META_HTMLMIMETYPE_TEXT_PLAINUDMF_META_PLAIN_TEXTMIMETYPE_TEXT_URIUDMF_META_GENERAL_FILE_URIMIMETYPE_TEXT_WANTNDK接口不支持二统一数据类型为了方便应用间数据交互减少数据类型适配工作量剪贴板还支持统一数据对象进行复制粘贴当前支持文本HTML三、接口说明一基础数据类型接口主要接口如下接口名称说明setData(data, callback)将数据写入系统剪贴板异步回调setData(data)将数据写入系统剪贴板Promise方式getData(callback)读取系统剪贴板内容异步回调getData()读取系统剪贴板内容Promise方式getDataSync()读取系统剪贴板内容同步接口注意事项getDataSync()不能与setData()在同线程调用获取URI类型数据后需使用文件管理的fs.copy接口获取文件二统一数据类型接口主要接口如下接口名称说明setUnifiedData(data)将统一数据对象写入系统剪贴板PromisesetUnifiedDataSync(data)将统一数据对象写入系统剪贴板同步getUnifiedData()从系统剪贴板读取统一数据对象PromisegetUnifiedDataSync()从系统剪贴板读取统一数据对象同步四、代码示例一基础数据类型1. 设置纯文本数据到剪贴板import { BusinessError, pasteboard } from kit.BasicServicesKit; import { hilog } from kit.PerformanceAnalysisKit; const systemPasteboard: pasteboard.SystemPasteboard pasteboard.getSystemPasteboard(); export async function setPlainData(content: string): Promisevoid { // 创建剪贴板数据指定为纯文本类型 let pasteData pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, content); // 将数据写入系统剪贴板 await systemPasteboard.setData(pasteData); }2. 从剪贴板获取纯文本数据export async function getPlainData(): Promisestring { // 从系统剪贴板中读取数据 let data await systemPasteboard.getData(); // 获取剪贴板数据中的条目数量 let recordCount data.getRecordCount(); // 遍历所有记录拼接文本内容 let result ; for (let i 0; i recordCount; i) { let record data.getRecord(i).toPlainText(); hilog.info(0xFF00, [Sample_pasteboard], Get data success, record: record); result record; } return result; }二统一数据类型示例1. 构造并设置统一数据类型数据import { BusinessError, pasteboard } from kit.BasicServicesKit; import { hilog } from kit.PerformanceAnalysisKit; import { unifiedDataChannel, uniformDataStruct, uniformTypeDescriptor } from kit.ArkData; const systemPasteboard: pasteboard.SystemPasteboard pasteboard.getSystemPasteboard(); export async function handleUniformData() { // 1. 构造一条PlainText数据 let plainText: uniformDataStruct.PlainText { uniformDataType: uniformTypeDescriptor.UniformDataType.PLAIN_TEXT, textContent: PLAINTEXT_CONTENT, abstract: PLAINTEXT_ABSTRACT, } // 创建统一数据记录 let record new unifiedDataChannel.UnifiedRecord( uniformTypeDescriptor.UniformDataType.PLAIN_TEXT, plainText ); // 创建统一数据对象 let data new unifiedDataChannel.UnifiedData(); data.addRecord(record); // 2. 向系统剪贴板中存入PlainText数据 systemPasteboard.setUnifiedData(data).then((data: void) { hilog.info(0xFF00, [Sample_pasteboard], Succeeded in setting UnifiedData.); // 存入成功处理正常场景 }).catch((err: BusinessError) { hilog.error(0xFF00, [Sample_pasteboard], Failed to set UnifiedData. Cause: err.message); // 处理异常场景 }); // 3. 从系统剪贴板中读取text数据 systemPasteboard.getUnifiedData().then((data) { let records: unifiedDataChannel.UnifiedRecord[] data.getRecords(); for (let j 0; j records.length; j) { if (records[j].getType() uniformTypeDescriptor.UniformDataType.PLAIN_TEXT) { let text records[j].getValue() as uniformDataStruct.PlainText; hilog.info(0xFF00, [Sample_pasteboard], ${j 1}.${text.textContent}); } } }).catch((err: BusinessError) { hilog.error(0xFF00, [Sample_pasteboard], Failed to get UnifiedData. Cause: err.message); // 处理异常场景 }); }2. 同步接口使用// 使用同步接口设置统一数据 function setUnifiedDataSyncExample() { let plainText: uniformDataStruct.PlainText { uniformDataType: uniformTypeDescriptor.UniformDataType.PLAIN_TEXT, textContent: 同步设置示例, abstract: 同步接口演示, } let record new unifiedDataChannel.UnifiedRecord( uniformTypeDescriptor.UniformDataType.PLAIN_TEXT, plainText ); let data new unifiedDataChannel.UnifiedData(); data.addRecord(record); // 同步设置数据 systemPasteboard.setUnifiedDataSync(data); } // 使用同步接口获取统一数据 function getUnifiedDataSyncExample() { let data systemPasteboard.getUnifiedDataSync(); let records data.getRecords(); records.forEach((record, index) { hilog.info(0xFF00, [Sample_pasteboard], 记录${index 1}: 类型${record.getType()}); }); }三其他数据类型操作1. 设置和获取HTML数据export async function setHtmlData(htmlContent: string): Promisevoid { let pasteData pasteboard.createData(pasteboard.MIMETYPE_TEXT_HTML, htmlContent); await systemPasteboard.setData(pasteData); } export async function getHtmlData(): Promisestring { let data await systemPasteboard.getData(); let htmlContent ; for (let i 0; i data.getRecordCount(); i) { htmlContent data.getRecord(i).toHtmlText(); } return htmlContent; }2. URI数据处理import { fileIo } from kit.CoreFileKit; export async function copyFileFromUri(uri: string, destPath: string): Promisevoid { // 设置URI到剪贴板 let pasteData pasteboard.createData(pasteboard.MIMETYPE_TEXT_URI, uri); await systemPasteboard.setData(pasteData); // 从剪贴板获取URI并复制文件 let data await systemPasteboard.getData(); if (data.getRecordCount() 0) { let fileUri data.getRecord(0).toUri(); // 使用文件管理接口复制文件 await fileIo.copy(fileUri, destPath); } }3. PixelMap图片数据处理import { BusinessError, pasteboard } from kit.BasicServicesKit; import { image } from kit.ImageKit; import { hilog } from kit.PerformanceAnalysisKit; const systemPasteboard: pasteboard.SystemPasteboard pasteboard.getSystemPasteboard(); // 设置PixelMap到剪贴板 export async function setPixelMapToClipboard(pixelMap: image.PixelMap): Promisevoid { try { // 创建包含PixelMap的剪贴板数据 let pasteData pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pixelMap); // 可选添加纯文本描述供不支持PixelMap的应用使用 pasteData.addTextRecord(图片已复制); await systemPasteboard.setData(pasteData); hilog.info(0xFF00, [Sample_pasteboard], PixelMap已成功复制到剪贴板); } catch (error) { hilog.error(0xFF00, [Sample_pasteboard], 设置PixelMap失败: error.message); throw error; } } // 从剪贴板获取PixelMap export async function getPixelMapFromClipboard(): Promiseimage.PixelMap | null { try { let data await systemPasteboard.getData(); let recordCount data.getRecordCount(); for (let i 0; i recordCount; i) { let record data.getRecord(i); // 检查是否为PixelMap类型 if (record.getMimeType() pasteboard.MIMETYPE_PIXELMAP) { let pixelMap record.toPixelMap(); hilog.info(0xFF00, [Sample_pasteboard], 成功获取PixelMap); return pixelMap; } } hilog.warn(0xFF00, [Sample_pasteboard], 剪贴板中没有PixelMap数据); return null; } catch (error) { hilog.error(0xFF00, [Sample_pasteboard], 获取PixelMap失败: error.message); throw error; } } // 从资源创建PixelMap并复制 export async function copyImageResourceToClipboard(resourceId: number): Promisevoid { try { // 创建ImageSource let imageSource image.createImageSource(/resources/base/media/image${resourceId}.png); // 创建PixelMap let decodeOptions: image.DecodingOptions { sampleSize: 1, desiredSize: { width: 800, height: 600 }, // 可选调整大小 desiredRegion: { size: { width: 800, height: 600 }, x: 0, y: 0 }, rotateDegrees: 0 }; let pixelMap await imageSource.createPixelMap(decodeOptions); // 复制到剪贴板 await setPixelMapToClipboard(pixelMap); // 释放资源 imageSource.release(); } catch (error) { hilog.error(0xFF00, [Sample_pasteboard], 复制图片资源失败: error.message); throw error; } }五、注意事项1. 建议使用基础数据类型方案实现复制粘贴功能如果需要跨应用数据交互考虑使用统一数据类型2. 数据类型注意ArkTS与NDK接口支持类型的差异Want类型在NDK接口中不受支持3. 权限从API version 12开始需关注剪贴板读取权限管控确保在AndroidManifest.xml中声明必要的权限4. 其他注意剪贴板数据大小限制128MB默认上限同步接口getDataSync()不能与setData()在同线程调用处理URI数据时使用正确的文件操作接口

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询