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 上,您可以绑定到 ClipboardManagerOnPrimaryClipChangedListener,像这样:

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 上,您可以使用 UIPasteboardUIPastedboardChangedNotification,像这样:

func listener(sender: NSNotification){
    // do something
}

func setupListener(){
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("listener:"), name: UIPasteboardChangedNotification, object: nil)
}