iOS应用程序可以在后台获取UIPasteboardChangedNotification吗?

问题描述:

我见过一个叫做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

然后我认为这不是一个好的解决方案。用户不知道他们复制的时间和字符串将被翻译。 –

一个可能的方法是当应用程序在后台进行常规时间间隔(例如5秒)时“监视”UIPasteboard,然后可以知道剪贴板中是否有更改。 为了确保复制内容是一个字符串,检查[[UIPasteboard generalPasteboard] string]

然而,后台任务被限制为600secs,(和播放静音音乐背景可能让你拒绝),所以有discussions在如何延长时间。另外,Pasterbot已经宣布了一个类似的方法,参见here