我可以在后台保留 Watch 应用程序 运行 吗?
Can I keep a Watch app running in background?
我知道 iOS 允许后台任务 运行,例如,继续接收位置更新,但是可以在手表应用程序中执行此操作吗?
在 Xcode 9.3 中,我为 "background modes" 配置了我的应用程序并选择了位置,并为 WatchKitExtension 创建了一个 Info.plist,一个 "Required background modes" 的 "App registers for location updates" 条目].
但我的手表应用程序在屏幕关闭时和在 Dock 中时仍然挂起。
App Programming Guide for watchOS,但是似乎排除了 运行在后台接收位置更新的可能性,因为它只允许后台处理四个 类 of activity:
- 后台应用刷新任务。使用 WKApplicationRefreshBackgroundTask 对象来...
- 后台快照刷新任务。使用 WKSnapshotRefreshBackgroundTask 对象更新 ...
- 后台监视连接任务。使用 WKWatchConnectivityRefreshBackgroundTask 对象接收您的 iOS 应用发送的数据 ...
- 后台 NSURLSession 任务。 ...
SO 的其他帖子表明这是不可能的,但证明否定是困难的,所以我再问一次:
我是 "flogging a dead horse" 试图让手表应用程序在后台运行以接收位置更新,还是 Xcode 承诺 WatchOS 不会交付。
不,不可能。
正如 WatchKit Programming Guide 明确指出的那样,WatchKit
应用不能使用后台执行,但 3 个用例除外:
- 网络操作使用
URLSession
- 正在使用
WKAudioFilePlayer
或 WKAudioFileQueuePlayer
播放音频
- 运行 使用
HKWorkoutSession
的锻炼
根据 WatchKit 编程指南,您无法在后台接收位置更新,这应该在连接到您的 watchOS
应用程序的 iOS
应用程序中完成。
我很高兴能够报告说,过去两周我一直在鞭打的那匹马毕竟没有死!
我发现了一种额外的状态,在这种状态下,我的手表应用程序将在不需要 HKWorkoutSession 的后台继续 运行。
这些设置起到了作用:
locationManager.allowsBackgroundLocationUpdates = true
并在 watchKitExtension info.plist:
将 UIBackgroundModes(必需的背景模式)设置为位置(应用注册位置更新)
我再说一遍:我没有使用 healthKit
现在我的应用程序会继续 运行 即使屏幕关闭并且应用程序不在 Dock 中。
我知道 iOS 允许后台任务 运行,例如,继续接收位置更新,但是可以在手表应用程序中执行此操作吗? 在 Xcode 9.3 中,我为 "background modes" 配置了我的应用程序并选择了位置,并为 WatchKitExtension 创建了一个 Info.plist,一个 "Required background modes" 的 "App registers for location updates" 条目].
但我的手表应用程序在屏幕关闭时和在 Dock 中时仍然挂起。
App Programming Guide for watchOS,但是似乎排除了 运行在后台接收位置更新的可能性,因为它只允许后台处理四个 类 of activity:
- 后台应用刷新任务。使用 WKApplicationRefreshBackgroundTask 对象来...
- 后台快照刷新任务。使用 WKSnapshotRefreshBackgroundTask 对象更新 ...
- 后台监视连接任务。使用 WKWatchConnectivityRefreshBackgroundTask 对象接收您的 iOS 应用发送的数据 ...
- 后台 NSURLSession 任务。 ...
SO 的其他帖子表明这是不可能的,但证明否定是困难的,所以我再问一次:
我是 "flogging a dead horse" 试图让手表应用程序在后台运行以接收位置更新,还是 Xcode 承诺 WatchOS 不会交付。
不,不可能。
正如 WatchKit Programming Guide 明确指出的那样,WatchKit
应用不能使用后台执行,但 3 个用例除外:
- 网络操作使用
URLSession
- 正在使用
WKAudioFilePlayer
或WKAudioFileQueuePlayer
播放音频
- 运行 使用
HKWorkoutSession
的锻炼
根据 WatchKit 编程指南,您无法在后台接收位置更新,这应该在连接到您的 watchOS
应用程序的 iOS
应用程序中完成。
我很高兴能够报告说,过去两周我一直在鞭打的那匹马毕竟没有死!
我发现了一种额外的状态,在这种状态下,我的手表应用程序将在不需要 HKWorkoutSession 的后台继续 运行。
这些设置起到了作用:
locationManager.allowsBackgroundLocationUpdates = true
并在 watchKitExtension info.plist:
将 UIBackgroundModes(必需的背景模式)设置为位置(应用注册位置更新)
我再说一遍:我没有使用 healthKit
现在我的应用程序会继续 运行 即使屏幕关闭并且应用程序不在 Dock 中。