我正在开发一个独立的WatchOS应用程序,其目的是识别用户何时离开特定区域,从而发送通知。为此,该应用程序严重依赖于后台位置更新。
到目前为止,应用程序运行正常。它基于distanceFilter
的{{1}}属性获取位置。问题是电池。我所采用的方法使后台位置更新保持执行状态,即使仅在“覆盖”特定距离时才获取后台位置更新。
然后我的想法是在用户离开该区域时禁用位置更新,并在夜间禁用此服务。但是,这种方法使我面临严重的问题。
我的主要问题是在后台禁用位置更新无法恢复它。我尝试通过以下方式做到这一点:
- 一个计时器。
-
CLLocationmanager
方法,在委托中调用scheduleBackgroundRefresh(withPreferredDate:userInfo:scheduledCompletion:)
似乎没有任何作用。我的问题是:
如果以前被禁用,有没有一种方法可以恢复后台位置? 预先谢谢你。
更新 n.2:我尝试使用startLocationUpdates()
执行位置更新,但它只是忽略了WKApplicationRefreshBackgroundTask
函数(由@RomuloBM建议)
requestLocation()
我在Locationmanager中使用此功能调用后台任务:
//In extension delegate handle() function
case let backgroundTask as WKApplicationRefreshBackgroundTask:
// Be sure to complete the background ta
LocMng = Locationmanager() // I even tried to create a new element!
LocMng.LocMng.requestLocation()// it is just ignored
backgroundTask.setTaskCompletedWithsnapshot(false)
作为参考,这是我的Locationmanager类:
//In didUpdateLocation
if background {
WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate: Date(timeIntervalSinceNow: 30),userInfo: nil){ _ in
print("Done")
self.background = false
self.LocMng.stopUpdatingLocation()
}
}