有没有办法让我的 WatchKit 应用程序 运行 在后台运行?
is there anyway to keep my WatchKit app running in the background?
我是 swift 和 WatchKit 的新手 framework.I 正在研究这个 month.Now 我的问题 is:is 可能 运行 一个应用程序在 Apple Watch 的后台模式下?我从文档中读到 WatchKit 扩展不支持后台执行 modes.But 如果这是真的如何运行健康应用程序之类的应用程序?我的意思是,手表上有一个应用程序称为健康,即使该应用程序不在 foreground.I 中,它也会在每个时刻占用您的炉速,它会做更多相同的事情,或者 less.In 我的应用程序,我只会在用户移动时检测到用户加速即使应用程序不在 foreground.How 中也可以观看吗?请向 post 我提供必要的文档,以便 so.Thanks 做很多事情!
Ps。对不起我的英语不好!
在 watchOS 3 中,锻炼应用程序可以 运行 在后台运行。我没有个人经验,但请查看 WWDC 2016 视频 Building Great Workout Apps。
是的,你可以。有几种方式:
- 使用 HKWorkoutSession 开始锻炼 - 最强大的方式,但是您需要使用 HealthKit 并且 Apple Watch 上只有 1 个应用程序可以 运行 这种方式。
- 使用 WKAudioFilePlayer 在后台播放音频 - 仅适用于音频。
- WKURLSessionRefreshBackgroundTask适合短时间后台刷新。
- 还有其他后台任务,例如
WKSnapshotRefreshBackgroundTask
或WKURLSessionRefreshBackgroundTask
。它们列在 this article. 的后台任务部分
performExpiringActivity(withReason:using:)
可用于在应用程序进入后台时短暂延长应用程序的寿命。
我也遇到了同样的问题。我想在应用程序处于后台模式时执行一些代码。我已经解决了这个问题。我发现了一种额外的状态,在这种状态下,我的手表应用程序将在后台继续 运行,不需要 HKWorkoutSession
或上面讨论的任何其他解决方案。只需按照以下步骤
- 进口
CoreLocation
- 在class
中添加CLLocationManagerDelegate
在willActive
方法中添加以下代码。
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = kCLDistanceFilterNone
if #available(watchOSApplicationExtension 3.0, *) {
locationManager.startUpdatingLocation()
} else {
// Fallback on earlier versions
}
if #available(watchOSApplicationExtension 4.0, *) {
locationManager.allowsBackgroundLocationUpdates = true
} else {
print("Location not updated")
}
最后添加 CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("Location updated\(locations)")
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location_update_error\(error)")
}
也许这会解决您的问题。
对于 WatchOS 6+,您的手表应用可以请求 WKExtendedRuntimeSession
(see documentation) 如果它属于以下 5 个用例之一:
- 自我照顾
- 正念
- 物理治疗
- 警报
- 健康监测
解释 WKExtendedRuntimeSession
的相关 WWDC 视频:https://developer.apple.com/videos/play/wwdc2019/251/
我是 swift 和 WatchKit 的新手 framework.I 正在研究这个 month.Now 我的问题 is:is 可能 运行 一个应用程序在 Apple Watch 的后台模式下?我从文档中读到 WatchKit 扩展不支持后台执行 modes.But 如果这是真的如何运行健康应用程序之类的应用程序?我的意思是,手表上有一个应用程序称为健康,即使该应用程序不在 foreground.I 中,它也会在每个时刻占用您的炉速,它会做更多相同的事情,或者 less.In 我的应用程序,我只会在用户移动时检测到用户加速即使应用程序不在 foreground.How 中也可以观看吗?请向 post 我提供必要的文档,以便 so.Thanks 做很多事情!
Ps。对不起我的英语不好!
在 watchOS 3 中,锻炼应用程序可以 运行 在后台运行。我没有个人经验,但请查看 WWDC 2016 视频 Building Great Workout Apps。
是的,你可以。有几种方式:
- 使用 HKWorkoutSession 开始锻炼 - 最强大的方式,但是您需要使用 HealthKit 并且 Apple Watch 上只有 1 个应用程序可以 运行 这种方式。
- 使用 WKAudioFilePlayer 在后台播放音频 - 仅适用于音频。
- WKURLSessionRefreshBackgroundTask适合短时间后台刷新。
- 还有其他后台任务,例如
WKSnapshotRefreshBackgroundTask
或WKURLSessionRefreshBackgroundTask
。它们列在 this article. 的后台任务部分
performExpiringActivity(withReason:using:)
可用于在应用程序进入后台时短暂延长应用程序的寿命。
我也遇到了同样的问题。我想在应用程序处于后台模式时执行一些代码。我已经解决了这个问题。我发现了一种额外的状态,在这种状态下,我的手表应用程序将在后台继续 运行,不需要 HKWorkoutSession
或上面讨论的任何其他解决方案。只需按照以下步骤
- 进口
CoreLocation
- 在class 中添加
在
willActive
方法中添加以下代码。locationManager = CLLocationManager() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.distanceFilter = kCLDistanceFilterNone if #available(watchOSApplicationExtension 3.0, *) { locationManager.startUpdatingLocation() } else { // Fallback on earlier versions } if #available(watchOSApplicationExtension 4.0, *) { locationManager.allowsBackgroundLocationUpdates = true } else { print("Location not updated") }
最后添加 CLLocationManagerDelegate
CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { print("Location updated\(locations)") } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Location_update_error\(error)") }
也许这会解决您的问题。
对于 WatchOS 6+,您的手表应用可以请求 WKExtendedRuntimeSession
(see documentation) 如果它属于以下 5 个用例之一:
- 自我照顾
- 正念
- 物理治疗
- 警报
- 健康监测
解释 WKExtendedRuntimeSession
的相关 WWDC 视频:https://developer.apple.com/videos/play/wwdc2019/251/