React Native - 剪贴板变化的监听器
React Native - Listener for change in clipboard
有没有办法在 React Native 中为剪贴板数据的变化添加监听器?
基本上取决于用户是否在他们的剪贴板中复制了一些东西,无论是在应用程序中还是在后台应用程序中,我都想执行一些方法。
React native 没有为您提供监听此类事件的方法,但您有两种方法:一种可以部分工作但非常简单,另一种将按应有的方式编写并按应有的方式工作好吧,但也需要更多的努力。
您可以使用 setInterval
创建一个计时器,它会调用 Clipboard.getString() (just remember that it is async, so you should either wrap it with await
or use .then(...)
) and compare it with the value it received from the previous call. If the values differ, the user copied something. This method won't work if your app is in background - for that, you should substitute setInterval
with a background service like this library。此外,如果值相同,它不会捕获副本,例如如果用户先复制文本 "sample" 然后再复制一次,则不会检测到它,因为字符串相同。
您可能应该选择的解决方案 是创建一个本机模块,分别为 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)
}
有没有办法在 React Native 中为剪贴板数据的变化添加监听器? 基本上取决于用户是否在他们的剪贴板中复制了一些东西,无论是在应用程序中还是在后台应用程序中,我都想执行一些方法。
React native 没有为您提供监听此类事件的方法,但您有两种方法:一种可以部分工作但非常简单,另一种将按应有的方式编写并按应有的方式工作好吧,但也需要更多的努力。
您可以使用 setInterval
创建一个计时器,它会调用 Clipboard.getString() (just remember that it is async, so you should either wrap it with await
or use .then(...)
) and compare it with the value it received from the previous call. If the values differ, the user copied something. This method won't work if your app is in background - for that, you should substitute setInterval
with a background service like this library。此外,如果值相同,它不会捕获副本,例如如果用户先复制文本 "sample" 然后再复制一次,则不会检测到它,因为字符串相同。
您可能应该选择的解决方案 是创建一个本机模块,分别为 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)
}