【问题标题】:Running application in background like google latitude在后台运行应用程序,如谷歌纬度
【发布时间】:2024-01-02 22:25:02
【问题描述】:

我现在正在开发一个跟踪用户位置的应用程序。 我希望这个应用程序即使不在任务列表中也能运行(双击主页按钮不显示它)。 与谷歌纬度一样,该应用程序不在后台运行。 我认为这个文档是关于当用户按下主页按钮时正在运行的应用程序:http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

但是如果用户通过双击主页按钮关闭此应用程序怎么办?我知道像谷歌纬度这样的应用程序仍在后台运行。那我该怎么做呢?

【问题讨论】:

    标签: iphone objective-c ios ios4 ios-4.2


    【解决方案1】:

    应用程序能够再次在后台运行,以防它在上次启动时注册了重大位置更改。如果 Google latitude 重新启动应用程序,那么他们会使用以下流程:

    1. 应用程序启动
    2. 检查设备是否可以提供重要的位置变化通知(具有蜂窝数据的设备可以处理这种通知):significantLocationChangeMonitoringAvailable
    3. 注册通知:startMonitoringSignificantLocationChanges
    4. 退出应用程序,一旦您的设备离开一个基站到另一个基站,系统就会发送通知,您的应用程序将被唤醒。

    有一个问题,没有正常的方法可以从此通知中取消注册。我认为只有为用户提供停止监控的选项。我注意到了这一点,状态栏右上角的箭头表示有人正在使用位置服务。

    【讨论】:

      【解决方案2】:

      我可以向您保证,谷歌纵横仅在用户运行时(可见)或作为后台进程运行时(多任务可用时)更新用户的位置。

      谷歌纵横正在使用location 后台服务,当应用在后台运行时,该服务使用手机信号塔来确定设备的位置(如您链接的文档中所述)。如果不是正在运行的进程,则 Latitude 应用无法更新位置。

      【讨论】:

      • Latitude 实际上会更新其位置,即使它未运行且不在多任务处理托盘中。我可以向你保证,确实如此。