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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以让Watch应用程序在后台运行吗?相关的知识,希望对你有一定的参考价值。

我知道ios允许运行后台任务,例如,继续接收位置更新,但是可以在手表应用程序中执行此操作吗?在Xcode 9.3中,我已经为“后台模式”和所选位置配置了我的应用程序,并且已经为WatchKitExtension创建了一个Info.plist,这是“应用程序寄存器用于位置更新”的“必需后台模式”条目。

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

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

  1. 后台应用刷新任务。使用WKApplicationRefreshBackgroundTask对象来...
  2. 后台快照刷新任务。使用WKSnapshotRefreshBackgroundTask对象更新...
  3. 背景观察连接任务。使用WKWatchConnectivityRefreshBackgroundTask对象接收iOS应用程序发送的数据...
  4. 背景NSURLSession任务。 ...

SO的其他帖子表明这是不可能的,但证明负面是困难的,所以我再问:

我试图让手表应用程序在后台运行以接收位置更新,或者Xcode正在做出WatchOS无法提供的承诺,从而“鞭打死马”。

答案

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

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

这些设置起到了作用:

locationManager.allowsBackgroundLocationUpdates = true

并在watchKitExtension info.plist中:

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

我再说一遍:我不使用healthKit

现在,即使屏幕关闭以及应用程序离开Dock,我的应用程序仍会继续运行。

另一答案

不,这是不可能的。

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

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

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

以上是关于我可以让Watch应用程序在后台运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Apple Watch 的后台每天运行一次代码?

我可以让一些代码像守护进程一样在 Django 中不断运行吗

apple watch怎么关闭后台

我需要让我的应用程序总是在后台运行。

如何让go编译的程序后台运行

尝试在屏幕关闭时让 Apple Watch 计时器应用程序在后台运行