React Native 没有为您提供监听此类事件的方法,但您有两种方法:一种可以部分工作,但非常简单;另一种可以按应有的方式编写并按应有的方式工作,但需要还有更多的努力。
您可以创建一个计时器setInterval
那会调用剪贴板 https://facebook.github.io/react-native/docs/clipboard.getString() (只要记住它是异步的,所以你应该用await
or use .then(...)
)并将其与上次调用收到的值进行比较。如果值不同,则用户复制了某些内容。如果您的应用程序处于后台,此方法将不起作用 - 为此,您应该替换setInterval
具有像这样的后台服务这个图书馆 https://github.com/ocetnik/react-native-background-timer。此外,如果值相同,它不会捕获副本,例如如果用户首先复制文本“sample”然后再次复制,它不会检测到它,因为字符串是相同的。
您可能应该选择的解决方案是创建一个本机模块,分别为 iOS 和 Android 实现本机侦听器。在 Android 上,您可以绑定到剪贴板管理器 https://developer.android.com/reference/android/content/ClipboardManager's 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 上你可以使用UIP纸板 https://developer.apple.com/documentation/uikit/uipasteboard's UIPastedboardChangedNotification
, 像那样:
func listener(sender: NSNotification){
// do something
}
func setupListener(){
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("listener:"), name: UIPasteboardChangedNotification, object: nil)
}