是否有一种方法可以添加侦听器以更改React Native中的剪贴板数据?基本上,根据用户是否在剪贴板中复制某些内容,无论应用程序内部还是在后台使用该应用程序,我都想执行一些方法。
React Native并没有为您提供聆听此类事件的方式,但是您有两种方法:一种可以部分工作,但非常简单,并且会按照应该编写的方法并尽其所能,但也需要更多的努力。
您可能会使用setInterval
创建一个计时器,该计时器会调用clipboard.getString()(请记住,它是异步,因此您应该用await
包装或使用.then(...)
)将其与从上一个呼叫接收的值进行比较。如果值有所不同,则用户会复制某些内容。如果您的应用在后台,此方法将无法使用 - 为此,您应该用像此库这样的背景服务替换setInterval
。此外,如果值相同,则不会捕获副本,例如如果用户首先复制文本"示例",然后再进行一次,则不会检测到它,因为字符串相同。
您可能应该选择的解决方案是创建一个本机模块,该模块将分别为iOS和Android实现本机侦听器。在Android上,您可以绑定到ClipboardManager的OnPrimaryClipChangedListener
,例如:
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
}
});
}
和在iOS上,您可以使用Uipasteboard的UIPastedboardChangedNotification
,例如:
func listener(sender: NSNotification){
// do something
}
func setupListener(){
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("listener:"), name: UIPasteboardChangedNotification, object: nil)
}