我可以让Watch应用程序在后台运行吗?

时间:2017-12-19 23:06:08

标签: location watchkit apple-watch background-task watch-os

我知道iOS允许运行后台任务,例如,继续接收位置更新,但是可以在手表应用程序中执行此操作吗? 在Xcode 9.3中,我已将我的应用程序配置为"后台模式"和已选择的位置,以及为WatchKitExtension创建的一个Info.plist,一个条目为"所需的背景模式" "应用程序注册位置更新"。

但我的手表应用程序在屏幕关闭时以及它在底座时仍会暂停。

然而,App Programming Guide for watchOS似乎排除了在后台运行以接收位置更新的可能性,因为它只允许对四类活动进行后台处理:

  1. 后台应用刷新任务。使用WKApplicationRefreshBackgroundTask对象来...
  2. 后台快照刷新任务。使用WKSnapshotRefreshBackgroundTask对象更新...
  3. 背景观察连接任务。使用WKWatchConnectivityRefreshBackgroundTask对象接收iOS应用程序发送的数据...
  4. 背景NSURLSession任务。 ...
  5. SO的其他帖子表明它不可能,但证明负面是困难的,所以我再问:

    我是否鞭打了一匹死马"通过尝试让手表应用程序在后台运行以接收位置更新,或者Xcode正在做出WatchOS无法实现的承诺。

2 个答案:

答案 0 :(得分:5)

我很高兴能够报告说,过去两周我一直鞭打的马并没有死!

我发现了一个额外的状态,我的监视应用程序将继续在后台运行,不需要HKWorkoutSession。

这些设置起到了作用:

locationManager.allowsBackgroundLocationUpdates = true

和watchKitExtension info.plist:

将UIBackgroundModes(所需的后台模式)设置为位置(应用程序寄存器以进行位置更新)

我再说一遍:我没有使用healthKit

现在我的应用程序继续运行,即使屏幕关闭以及应用程序离开Dock时也是如此。

答案 1 :(得分:1)

不,这是不可能的。

正如WatchKit Programming Guide明确指出的那样,除了3个用例外,WatchKit个应用无法使用后台执行:

  • 使用URLSession
  • 的网络操作
  • 使用WKAudioFilePlayerWKAudioFileQueuePlayer
  • 播放音频
  • 使用HKWorkoutSession
  • 运行锻炼

根据WatchKit编程指南,您无法在后台接收位置更新,这应该在与您的iOS应用程序相连的watchOS应用中完成。