React native не предоставляет вам способа прослушивания таких событий, но у вас есть два подхода: один, который будет работать частично, но очень простой, и другой, который будет написан так, как должен, и будет работать так же, как должен,но требует гораздо больше усилий.
Вы можете создать таймер с setInterval
, который будет вызывать Буфер обмена .getString () (просто помните, что это асинхронно, поэтому вы должны либооберните его await
или используйте .then(...)
) и сравните его со значением, полученным при предыдущем вызове.Если значения различаются, пользователь что-то скопировал.Этот метод не будет работать, если ваше приложение работает в фоновом режиме - для этого вам следует заменить setInterval
фоновым сервисом, таким как this library .Более того, он не будет захватывать копию, если значение совпадает, например, если пользователь сначала скопировал текст «образец», а затем сделал это снова, он не обнаружит его, поскольку строки одинаковы.
Решение, которое вы, вероятно, должны выбрать , - создать собственный модуль, который будет реализовывать собственный слушатель для 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 's UIPastedboardChangedNotification
, вот так:
func listener(sender: NSNotification){
// do something
}
func setupListener(){
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("listener:"), name: UIPasteboardChangedNotification, object: nil)
}