iOS应用可以在后台获取UIPasteboard更改通知吗?

时间:2012-12-28 04:47:05

标签: ios background notifications nsnotificationcenter uipasteboard

我见过一款名为CopyTranslate的iphone应用程序。我们复制的东西,例如在safari中,它可以翻译我们通过本地通知复制的内容。

所以我想知道app是否可以在后台接收UIPasteboardChangedNotification。然后我做了一个测试,我构建了一个可以在后台运行10分钟的应用程序,并观察到UIPasteboardChangedNotification。结果是应用程序无法在后台获取通知。

任何人都可以了解CopyTranslate如何实现其功能吗?它每秒检查一次UIPasetBoard吗?如果这样,它如何知道有一个新的字符串副本而不是图像副本或其他东西。

感谢您的任何想法!

我通过在后台检查每秒UIPasteboard的changeCount来解决这个问题。

以下是详细信息:

我在AppDelegate中持有一个属性lastChangeCount,当我的应用程序进入后台时,我启动一个无限循环,每次迭代睡眠1秒。我将比较UIPasteboard的changeCount和每次迭代的lastChangeCount,如果它们不相等,那么我知道在粘贴板中有一些新的粘贴项。所以我将获得UIPasteboard的字符串属性,如果它存在,我会安排一个本地通知来显示它。如果没有,我的意思是用户可以复制图像或其他东西,所以我什么都不做。

1 个答案:

答案 0 :(得分:1)

一种可能的方法是当应用程序处于常规时间间隔(例如5秒)时“监视”UIPasteboard,然后可以知道剪贴板是否有变化。 为了确保复制内容是字符串,请选中[[UIPasteboard generalPasteboard] string]

然而,后台任务限制为600秒,(在后台播放静音音乐可能会让你被拒绝),因此discussions如何延长时间。此外,Pasterbot宣布了一种类似的方法,请参阅here