React Native-侦听器在剪贴板中更改



是否有一种方法可以添加侦听器以更改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)
}

相关内容

  • 没有找到相关文章

最新更新