import { pasteboard } from '@kit.BasicServicesKit';
import { StrUtil } from './StrUtil';/*** 剪貼板工具類* 需要權限:* ohos.permission.READ_PASTEBOARD // 允許應用讀取剪貼板。* @author CSDN-鴻蒙布道師* @since 2025/04/25*/
export class PasteboardUtil {/*** 將數據寫入系統剪貼板,使用Promise異步回調。* @param mimeType 數據類型* @param data 數據內容* @returns Promise<void>*/static setData(mimeType: string, data: string): Promise<void> {const pasteData = pasteboard.createData(mimeType, data);return PasteboardUtil.getSystemPasteboard().setData(pasteData);}/*** 將純文本數據寫入系統剪貼板。* @param text 純文本內容* @returns Promise<void>*/static setDataText(text: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_PLAIN, text);}/*** 將HTML數據寫入系統剪貼板。* @param html HTML內容* @returns Promise<void>*/static setDataHtml(html: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_HTML, html);}/*** 將URI數據寫入系統剪貼板。* @param uri URI內容* @returns Promise<void>*/static setDataUri(uri: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_URI, uri);}/*** 獲取系統剪貼板內容。* @returns Promise<pasteboard.PasteData>*/static getData(): Promise<pasteboard.PasteData> {return PasteboardUtil.getSystemPasteboard().getData();}/*** 讀取系統剪貼板內容,優先級為:文本 > HTML > URI。* @returns Promise<string>*/static async getDataStr(): Promise<string> {if (!await PasteboardUtil.hasData()) {return '';}const data = await PasteboardUtil.getData();return PasteboardUtil.extractPrimaryText(data);}/*** 同步讀取系統剪貼板內容,優先級為:文本 > HTML > URI。* @returns string*/static getDataSyncStr(): string {if (!PasteboardUtil.hasDataSync()) {return '';}const data = PasteboardUtil.getSystemPasteboard().getDataSync();return PasteboardUtil.extractPrimaryText(data);}/*** 清空系統剪貼板內容。* @returns Promise<void>*/static clearData(): Promise<void> {return PasteboardUtil.getSystemPasteboard().clearData();}/*** 判斷系統剪貼板中是否有內容(異步)。* @returns Promise<boolean>*/static hasData(): Promise<boolean> {return PasteboardUtil.getSystemPasteboard().hasData();}/*** 判斷系統剪貼板中是否有內容(同步)。* @returns boolean*/static hasDataSync(): boolean {return PasteboardUtil.getSystemPasteboard().hasDataSync();}/*** 獲取系統剪貼板對象。* @returns SystemPasteboard*/private static getSystemPasteboard(): pasteboard.SystemPasteboard {return pasteboard.getSystemPasteboard();}/*** 提取剪貼板數據中的主要文本內容。* @param data 剪貼板數據* @returns string*/private static extractPrimaryText(data: pasteboard.PasteData): string {let text = data.getPrimaryText() || data.getPrimaryHtml() || data.getPrimaryUri() || '';return StrUtil.isEmpty(text) ? '' : text;}
}
代碼如下:
import { pasteboard } from '@kit.BasicServicesKit';
import { StrUtil } from './StrUtil';/*** 剪貼板工具類* 需要權限:* ohos.permission.READ_PASTEBOARD // 允許應用讀取剪貼板。* @author CSDN-鴻蒙布道師* @since 2025/04/25*/
export class PasteboardUtil {/*** 將數據寫入系統剪貼板,使用Promise異步回調。* @param mimeType 數據類型* @param data 數據內容* @returns Promise<void>*/static setData(mimeType: string, data: string): Promise<void> {const pasteData = pasteboard.createData(mimeType, data);return PasteboardUtil.getSystemPasteboard().setData(pasteData);}/*** 將純文本數據寫入系統剪貼板。* @param text 純文本內容* @returns Promise<void>*/static setDataText(text: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_PLAIN, text);}/*** 將HTML數據寫入系統剪貼板。* @param html HTML內容* @returns Promise<void>*/static setDataHtml(html: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_HTML, html);}/*** 將URI數據寫入系統剪貼板。* @param uri URI內容* @returns Promise<void>*/static setDataUri(uri: string): Promise<void> {return PasteboardUtil.setData(pasteboard.MIMETYPE_TEXT_URI, uri);}/*** 獲取系統剪貼板內容。* @returns Promise<pasteboard.PasteData>*/static getData(): Promise<pasteboard.PasteData> {return PasteboardUtil.getSystemPasteboard().getData();}/*** 讀取系統剪貼板內容,優先級為:文本 > HTML > URI。* @returns Promise<string>*/static async getDataStr(): Promise<string> {if (!await PasteboardUtil.hasData()) {return '';}const data = await PasteboardUtil.getData();return PasteboardUtil.extractPrimaryText(data);}/*** 同步讀取系統剪貼板內容,優先級為:文本 > HTML > URI。* @returns string*/static getDataSyncStr(): string {if (!PasteboardUtil.hasDataSync()) {return '';}const data = PasteboardUtil.getSystemPasteboard().getDataSync();return PasteboardUtil.extractPrimaryText(data);}/*** 清空系統剪貼板內容。* @returns Promise<void>*/static clearData(): Promise<void> {return PasteboardUtil.getSystemPasteboard().clearData();}/*** 判斷系統剪貼板中是否有內容(異步)。* @returns Promise<boolean>*/static hasData(): Promise<boolean> {return PasteboardUtil.getSystemPasteboard().hasData();}/*** 判斷系統剪貼板中是否有內容(同步)。* @returns boolean*/static hasDataSync(): boolean {return PasteboardUtil.getSystemPasteboard().hasDataSync();}/*** 獲取系統剪貼板對象。* @returns SystemPasteboard*/private static getSystemPasteboard(): pasteboard.SystemPasteboard {return pasteboard.getSystemPasteboard();}/*** 提取剪貼板數據中的主要文本內容。* @param data 剪貼板數據* @returns string*/private static extractPrimaryText(data: pasteboard.PasteData): string {let text = data.getPrimaryText() || data.getPrimaryHtml() || data.getPrimaryUri() || '';return StrUtil.isEmpty(text) ? '' : text;}
}