我是 swift 和 WatchKit 框架的新手。我只研究了一个月。现在我的问题是:是否可以在 Apple Watch 上以后台模式运行应用程序?我从 WatchKit 扩展的文档中读到不支持后台执行模式。但如果这件事是真的,如何运行像健康应用程序这样的应用程序?我的意思是,在手表上有一个名为健康的应用程序,即使该应用程序不在前台,它也会在每个瞬间获取您的心率.我或多或少会做同样的事情。在我的应用程序中,即使应用程序不在前台,我也会仅在用户移动手表时检测用户加速度。我该怎么做?请将必要的文件寄给我。非常感谢!
附言。对不起我的英语不好!
是的,你可以。有几种方法:
WKSnapshotRefreshBackgroundTask
或者WKURLSessionRefreshBackgroundTask
。它们列在本文的后台任务部分。performExpiringActivity(withReason:using:)
可用于在进入后台时短暂延长应用程序的寿命。另外,阅读利用 iOS 技术。
WKExtendedRuntimeSession
(参见文档) 如果它属于以下 5 个用例之一:
相关WWDC视频讲解
WKExtendedRuntimeSession
:https://developer.apple.com/videos/play/wwdc2019/251/
在 watchOS 3 中,锻炼应用程序可以在后台运行。我没有个人经验,但请查看 WWDC 2016 视频Building Great Workout Apps.
我也面临同样的问题。我想在应用程序处于后台模式时执行一些代码。我已经解决了这个问题。我发现了一种额外的状态,在这种状态下,我的手表应用程序将继续在后台运行,不需要
HKWorkoutSession
或上面讨论的任何其他解决方案。只需按照以下步骤
CoreLocation
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)") }
也许这会解决您的问题。