有没有一种方法可以为React Native中的剪贴板数据更改添加侦听器? 基本上取决于用户是否已在剪贴板中复制了某些内容,无论是在应用程序内部还是在后台应用程序,我都想执行一些方法。
答案 0 :(得分:4)
React native无法为您提供侦听此类事件的方法,但是您有两种方法:一种可以部分工作但非常简单,而另一种可以按需编写并且可以按需工作,但也需要更多的努力。
您可以使用setInterval
创建一个计时器,该计时器将调用Clipboard。getString()(请记住,它是异步的,因此应将其包装在await
或使用{{ 1}}),并将其与从上一次调用中收到的值进行比较。如果值不同,则用户复制了一些内容。如果您的应用程序在后台运行,则此方法将不起作用-为此,您应将.then(...)
替换为this library之类的后台服务。而且,如果值相同,例如,它将不会捕获副本。如果用户首先复制了文本“ sample”,然后再次进行复制,则不会检测到该文本,因为字符串是相同的。
您可能应该选择的解决方案是创建一个本机模块,该模块将分别为iOS和Android实现本机侦听器。在Android上,您可以像这样绑定到ClipboardManager的setInterval
:
OnPrimaryClipChangedListener
在iOS上,您可以像这样使用UIPasteboard的void setupListener(){
final ClipboardManager clipboardMgr = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboardMgr.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
String contents = clipboardMgr.getText().toString();
// do something with it, e.g. emit an event to JS
}
});
}
:
UIPastedboardChangedNotification