HarmonyOS 鸿蒙Next 剪贴板添加监听

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 剪贴板添加监听

代码如下:

let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();
    let listener = () => {
      console.info('回调测试');
    };
    systemPasteboard.on('update', listener);

我用真机手动将新内容添加到剪贴板后未触发回调,但是我在代码内用setData方法将内容写入剪贴板内可以触发


更多关于HarmonyOS 鸿蒙Next 剪贴板添加监听的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

这边手动添加或者是代码添加都触发了此回调,参考一下此Demo

import { pasteboard } from '@kit.BasicServicesKit';

@Entry

@Component

struct TextTestPage {

  aboutToAppear(): void {

    let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();

    let listener = () => {

      console.info('The system pasteboard has changed.');

    };

    systemPasteboard.on('update', listener);

  }

  @State message: string = 'Hello World';

  @State myMsg: string = '';

  build() {

    Row() {

      Column() {

        Text(this.message)

          .fontSize(18)

          .fontWeight(FontWeight.Bold)

        Button('复制').onClick(()=>{

          pasteboard.getSystemPasteboard().setDataSync(pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, this.message))

        })

        TextArea({

          text: this.myMsg,

        })

          .onChange((value: string) => {

            this.myMsg = value;

          })

      }

      .width('100%')

    }

    .height('100%')

  }

}

,试下如下代码是否可以触发监听事件,我这边长按、复制文本可以触发监听事件:

import { BusinessError, pasteboard } from '@kit.BasicServicesKit';

import { abilityAccessCtrl, common } from '@kit.AbilityKit';

import { Permissions } from '@kit.AbilityKit';

import { PermissionRequestResult } from '@kit.AbilityKit';

@Entry

@Component

struct TextTestPage {

  permissions: Permissions[] = ['ohos.permission.READ_PASTEBOARD'];

  method_setListener() {

    // 弹起剪贴板权限框

    let mContext = getContext(this);

    const permissions: Permissions[] = ['ohos.permission.READ_PASTEBOARD'];

    let atManager = abilityAccessCtrl.createAtManager();

    atManager.requestPermissionsFromUser(mContext, permissions).then((result: PermissionRequestResult) => {

      console.log(`get Permission success, result: ${JSON.stringify(result)}`);

      // 添加剪贴板监听事件

      let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();

      let listener = () => {

        // 如果剪贴板内容发生变化执行的回调

        console.log('如果剪贴板内容发生变化执行的回调');

        // 获取系统剪贴板内容

        let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();

        systemPasteboard.getData((err: BusinessError, pasteData: pasteboard.PasteData) => {

          if (err) {

            console.error('Failed to get PasteData. Cause: ' + err.message);

            console.log('这是一条错误信息')

            return;

          }

          let text: string = pasteData.getPrimaryText();

          console.log("获取更新后的剪贴板数据", text)

        });

      };

      systemPasteboard.on('update', listener);

    }).catch((error: BusinessError) => {

      console.error(`get Permission error, error. Code: ${error.code}, message: ${error.message}`);

    })

  }

  aboutToAppear(): void {

    this.method_setListener()

  }

  @State message: string = 'Hello World';

  @State myMsg: string = '';

  build() {

    Row() {

      Column({ space: 10 }) {

        Text(this.message)

          .fontSize(18)

          .fontWeight(FontWeight.Bold)

          .copyOption(CopyOptions.LocalDevice)

        TextArea({

          text: this.myMsg,

        })

          .onChange((value: string) => {

            this.myMsg = value;

          })

      }

      .width('100%')

    }

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next 剪贴板添加监听的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,为剪贴板添加监听功能,可以通过使用系统提供的剪贴板管理器(ClipboardManager)及其相关API实现。以下是一个简要的步骤说明:

  1. 获取剪贴板管理器: 通过getContext().getSystemService(Context.CLIPBOARD_SERVICE)获取ClipboardManager实例。

  2. 添加剪贴板内容变化监听: HarmonyOS提供了addPrimaryClipChangedListener方法用于监听剪贴板内容的变化。需要实现OnPrimaryClipChangedListener接口,并重写onPrimaryClipChanged方法。

  3. 实现监听逻辑: 在onPrimaryClipChanged方法中编写当剪贴板内容变化时需要执行的逻辑。例如,读取新的剪贴板内容并处理。

  4. 移除监听: 当不再需要监听剪贴板变化时,调用removePrimaryClipChangedListener方法移除监听器。

示例代码片段(非完整代码,仅供理解逻辑):

ClipboardManager clipboardManager = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
    @Override
    public void onPrimaryClipChanged() {
        // 处理剪贴板内容变化的逻辑
    }
});

注意:上述代码中的java关键字仅为说明通用Android开发模式,实际在HarmonyOS开发中,请使用鸿蒙特定的API及语法。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部