3

我見過一個叫做CopyTranslate的iPhone應用程序。當我們複製某些內容時在safari中,它可以翻譯我們通過本地通知複製的內容。iOS應用程序可以在後臺獲取UIPasteboardChangedNotification嗎?

所以我想知道如果應用程序即使在後臺也可以接收UIPasteboardChangedNotification。然後我做了一個測試,建立一個可以在後臺運行10分鐘的應用程序,並觀察UIPasteboardChangedNotification。結果是該應用程序無法在後臺獲取通知。

任何人都可以有如何CopyTranslate如何實現其功能的想法?它每秒鐘檢查UIPasetBoard嗎?如果是這樣,它如何知道有一個新的字符串副本,而不是圖像副本或其他東西。

謝謝你的任何想法!

我已經通過檢查背景中每秒UIPasteboard的changeCount來解決了這個問題。

下面是詳細介紹:

我持有的AppDelegate屬性lastChangeCount,當我的應用程序進入後臺,我開始一個無限while循環,其睡眠每次迭代1秒。我會比較每次迭代的UIPasteboard的changeCount和lastChangeCount,如果它們不相等,那麼我知道在粘貼板中有一些新的粘貼項目。所以我會得到UIPasteboard的字符串屬性,如果它存在,我會安排一個本地通知來顯示它。如果沒有,我的意思是用戶可能會複製一張圖片或其他東西,所以我什麼都不會做。

+0

你能在背景中保持循環運行多久? –

+0

10分鐘@AllenHsu –

+0

然後我認爲這不是一個好的解決方案。用戶不知道他們複製的時間和字符串將被翻譯。 –

回答

1

一個可能的方法是當應用程序在後臺進行常規時間間隔(例如5秒)時「監視」UIPasteboard,然後可以知道剪貼板中是否有更改。 爲了確保複製內容是一個字符串,檢查[[UIPasteboard generalPasteboard] string]

然而,後臺任務被限制爲600secs,(和播放靜音音樂背景可能讓你拒絕),所以有discussions在如何延長時間。另外,Pasterbot已經宣佈了一個類似的方法,參見here

相關問題