鸿蒙NEXT开发剪贴板工具类PasteboardUtil(ArkTs)

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;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值