Может ли приложение iOS получить UIPasteboardChangedNotification в фоновом режиме?

Я видел приложение iphone под названием CopyTranslate. Когда мы что-то копируем, например. в сафари он может дать перевод того, что мы скопировали с помощью локального уведомления.

Поэтому мне интересно, может ли приложение получать UIPasteboardChangedNotification даже в фоновом режиме. Затем я делаю тест, чтобы создать приложение, которое может работать в фоновом режиме в течение 10 минут, и наблюдать за UIPasteboardChangedNotification. В результате приложение не может получать уведомление в фоновом режиме.

У кого-нибудь есть идеи, как CopyTranslate реализует свою функцию? Проверяет ли он UIPasetBoard в секунду? Если, таким образом, как он знает, есть новая строковая копия вместо копии изображения или что-то еще.

Спасибо за любую идею!

Я решил эту проблему, проверив changeCount UIPboard в секунду в фоновом режиме.

Вот подробности:

Я сохраняю свойство lastChangeCount в AppDelegate, и когда мое приложение входит в фон, я запускаю бесконечный цикл while, который спят на 1 секунду на итерацию. И я сравню значение changeCount UIPasteboard с lastChangeCount за итерацию, если они не равны, тогда я знаю, что в картотеке есть несколько новых элементов пасты. Поэтому я получу свойство строки UIPastboard, если оно существует, я планирую локальное уведомление, чтобы показать его. Если нет, я имею в виду, что пользователь может копировать изображение или что-то еще, поэтому я ничего не сделаю.

3
добавлено отредактировано
Просмотры: 1
Как я уже знал, невозможно сделать приложение iOS запущенным в фоновом режиме навсегда, вы узнали что-нибудь интересное?
добавлено автор saiday, источник
Как долго вы можете поддерживать цикл в фоновом режиме?
добавлено автор Allen Hsu, источник
Тогда я думаю, что это нехорошее решение. Пользователи никогда не знали, когда и какие строки, которые они скопировали, будут переведены.
добавлено автор Allen Hsu, источник
10 минут @ AllenHsu
добавлено автор Phineas Lue, источник
Фактически, поскольку он будет проверять новую копию в секунду, что обычно чаще, чем операции копирования пользователя, пользователь может почувствовать, что он просто реагирует на немедленную операцию копирования. И я думаю, мы можем использовать какой-то метод, чтобы он работал в фоновом режиме навсегда, как указано ниже.
добавлено автор Phineas Lue, источник

1 ответы

Возможный метод - «контролировать» UIP-карту, когда приложение находится в фоновом режиме для регулярных интервалов времени, например, 5 секунд, а затем можно узнать, есть ли изменения в буфере обмена. Чтобы убедиться, что содержимое копии является строкой, проверьте [[UIPasteboard generalPasteboard] строка]

Тем не менее фоновая задача ограничена 600 секундами (и воспроизведение немой музыки в фоновом режиме может вас отбросить), поэтому есть обсуждения о том, как продлить время. Кроме того, Pasterbot объявил аналогичный метод, см. здесь .

1
добавлено