iOS应用程序能在后台接收UIPasteboardChangedNotification通知吗?

3
我看到了一个名为CopyTranslate的iPhone应用程序。当我们复制一些东西,如在Safari中时,它可以通过本地通知给出所复制内容的翻译。
所以我想知道该应用程序是否可以在后台接收UIPasteboardChangedNotification。然后,我进行了一个测试,我建立了一个可以在后台运行10分钟且观察UIPasteboardChangedNotification的应用程序。结果是应用程序无法在后台接收通知。
有没有人有想法来实现CopyTranslate这样的功能呢?它是否每秒钟检查一次UIPasetBoard?如果是这样,它如何知道有新的字符串复制而不是图像复制或其他什么东西。
感谢任何想法!
我通过在后台每秒钟检查一次UIPasteboard的changeCount来解决了这个问题。
以下是详细信息:
我在AppDelegate中持有一个名为lastChangeCount的属性,当我的应用程序进入后台时,我启动一个无限循环,每次迭代都会睡眠1秒钟。我将比较UIPasteboard的changeCount和lastChangeCount每次迭代,如果它们不相等,则我知道剪贴板中有一些新的粘贴项目。因此,如果存在UIPasteboard的字符串属性,则我会安排一个本地通知来显示它。如果不存在,则表示用户可能复制了图像或其他什么东西,因此我什么都不做。

你能让循环在后台运行多久? - Allen Hsu
那么我认为这不是一个好的解决方案。用户从来不知道他们复制了哪些字符串会被翻译。 - Allen Hsu
实际上,由于它每秒都会检查新的副本,这通常比用户副本操作更频繁,因此用户可能会感觉它只是立即响应副本操作。我认为我们可以使用一些方法使其永久在后台运行,如下所述。 - Phineas Lue
据我所知,iOS 应用程序无法永久在后台运行,你有发现任何有趣的事情吗? - saiday
1个回答

1
一种可能的方法是在应用程序处于后台时以固定时间间隔(例如5秒)“监视”UIPasteboard,然后就可以知道剪贴板是否有变化。 为了确保复制的内容是字符串,请检查[[UIPasteboard generalPasteboard] string] 但是后台任务仅限于600秒(在后台播放静音音乐可能会被拒绝),因此有讨论如何延长时间。此外,Pasterbot已经声明了类似的方法,请参见这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接