3

我看过一个名为 CopyTranslate 的 iPhone 应用程序。当我们复制某些东西时,例如在 safari 中,它可以通过本地通知对我们复制的内容进行翻译。

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

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

谢谢你的任何想法!

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

以下是详细信息:

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

4

1 回答 1

1

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

然而后台任务被限制在600秒,(并且在后台播放静音音乐可能会被拒绝),所以关于如何延长时间的讨论。此外,Pasterbot 已经声明了一个类似的方法,请参见此处

于 2012-12-28T08:18:53.893 回答