HarmonyOS 鸿蒙Next 剪贴板添加监听
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
这边手动添加或者是代码添加都触发了此回调,参考一下此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实现。以下是一个简要的步骤说明:
-
获取剪贴板管理器: 通过
getContext().getSystemService(Context.CLIPBOARD_SERVICE)
获取ClipboardManager
实例。 -
添加剪贴板内容变化监听: HarmonyOS提供了
addPrimaryClipChangedListener
方法用于监听剪贴板内容的变化。需要实现OnPrimaryClipChangedListener
接口,并重写onPrimaryClipChanged
方法。 -
实现监听逻辑: 在
onPrimaryClipChanged
方法中编写当剪贴板内容变化时需要执行的逻辑。例如,读取新的剪贴板内容并处理。 -
移除监听: 当不再需要监听剪贴板变化时,调用
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