我是关于swift和WatchKit框架的新手。我从一个月开始研究这个问题。现在我的问题是:可以在苹果手表上以后台模式运行应用吗?我从文档中读到WatchKit扩展不支持后台执行模式。但是如果真的如此工作如何使用健康应用程序这样的应用程序?我的意思是,在手表上有一个名为health的应用程序,即使是应用程序不在前台。我会做或多或少做同样的事情。在我的应用程序中,我只会在用户移动手表时检测到用户加速,即使应用程序不在前台。我该怎么办?请给我发一份必要的文件。非常感谢!
聚苯乙烯。对不起我的英语不好!
答案 0 :(得分:1)
在watchOS 3中,锻炼应用程序可以在后台运行。我没有亲身经历,但请查看WWDC 2016视频Building Great Workout Apps。
答案 1 :(得分:1)
是的,你可以。有几种方法:
WKSnapshotRefreshBackgroundTask
或WKURLSessionRefreshBackgroundTask
。它们列在this article的后台任务部分中。performExpiringActivity(withReason:using:)
可以用来在应用程序到达后台时延长应用程序的使用寿命。答案 2 :(得分:1)
使用WatchOS 6+,如果您的手表应用属于以下5个用例之一,则可以请求WKExtendedRuntimeSession
(see documentation):
有关WWDC的视频,其中介绍了A$application_date <- as.Date(A$application_date)
B$date <- as.Date(B$date)
:https://developer.apple.com/videos/play/wwdc2019/251/
答案 3 :(得分:0)
我也面临着同样的问题。我想在应用程序处于后台模式时执行一些代码。我已经解决了这个问题。我发现了一种额外的状态,其中我的手表应用程序将继续在后台运行,不需要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)") }
也许可以解决您的问题。