React Native - Слушатель изменений в буфере обмена - PullRequest
0 голосов
/ 17 февраля 2019

Есть ли способ добавить прослушиватель для изменения данных буфера обмена в React Native?В основном, в зависимости от того, скопировал ли пользователь что-то в свой буфер обмена, независимо от того, находится ли оно внутри приложения или в приложении в фоновом режиме, я хочу выполнить некоторые методы.

1 Ответ

0 голосов
/ 17 февраля 2019

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...