没有使用重要位置监控的互联网没有位置坐标
Posted
技术标签:
【中文标题】没有使用重要位置监控的互联网没有位置坐标【英文标题】:No location Coordinates without internet with SignificantLocationMonitoring 【发布时间】:2017-01-30 10:56:50 【问题描述】:我正在尝试在 swift ios 中在后台记录位置坐标。
当应用程序进入后台时,我使用startMonitoringSignificantLocationChanges
,当它进入前台时,我使用stopMonitoringSignificantLocationChanges()
和startUpdatingLocation()
。
我已经在finishLaunching
中正确地实例化了位置管理器。
当 iPhone 连接到互联网时,一切似乎都很好,但由于某种原因,当没有可用的互联网时,似乎我没有得到任何位置坐标,也没有打电话给 didFailWithError
。
在前台时,它至少会给出错误:Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
但是对于背景,当我行驶 30 公里时它甚至没有给出错误。
出于调试目的,我使用本地通知在回调 didFailWithError 和 didUpdateLocations 时通知我。
通过活跃的互联网连接,即使应用程序被杀死或在后台运行,它也能正常工作,但是当我在没有 wifi 或蜂窝数据的情况下尝试同样的操作时,我似乎根本没有得到响应。如何处理 GPS 设置和监视用户位置,因为我希望它在后台自行排序。这种行为有什么解释吗。如果没有互联网,我需要有离线行为。
谢谢
【问题讨论】:
您是否通过将设备置于飞行模式来禁用互联网连接? 您在使用 GSM 的国家/地区吗? 是的,浅思想。 @Andrea 是的,用于调试我正在关闭/打开飞行模式以诱使 iPhone 相信蜂窝网络发生了变化。我注意到的另一件事是应用程序没有从死机重新启动,因为它应该在重要位置,直到我打开 wifi。 【参考方案1】:来自 Apple 文档:
确定区域监控的可用性
在尝试监控任何区域之前,您的应用应检查 当前设备是否支持区域监控。这里是 区域监控可能不可用的一些原因:
设备没有支持区域所需的硬件 监控。 用户拒绝了应用程序使用区域的授权 监控。 用户在“设置”应用中禁用了定位服务。 用户在设置应用程序中禁用了后台应用程序刷新,或者 用于设备或您的应用。设备处于飞行模式,并且 无法启动必要的硬件。
您遇到的问题与“Region Monitoring and Ibeacon”文档部分的摘录一致。 尝试通过禁用 WiFi 和蜂窝数据来更改您的测试。
【讨论】:
感谢@andrea,但我不使用区域监控。为了调试,我关闭/打开飞行模式几秒钟,这给 iPhone 的印象是蜂窝塔已更改,它应该回调位置管理器代表,但是当设备未连接到互联网或 wifi 时没有回调。我认为significantMonitoring的期望行为是它应该在蜂窝塔发生变化时唤醒GPS,如果无法获取位置,它应该调用didFailWitherror,这没有发生。但是,对于蜂窝数据,它会提供回调以在后台正确委托。再次感谢。 也许我错了,但我认为区域监控是重大位置变化的密切父母。我也对 GPS 的工作持怀疑态度,这种功能用于避免电池消耗。 :) 谢谢..你是对的,它们在节省电池方面非常出色。是否有任何解释表明重要位置在没有互联网或蜂窝网络的情况下不会给委托提供任何回调,因为当我的应用程序未连接到互联网时,如果它无法从 GPS 获取位置,它至少应该调用 didFailwithError 而不是案例。以上是关于没有使用重要位置监控的互联网没有位置坐标的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sqlite 或 CoreData 中保存位置坐标,并在 swift 中进行重要的位置监控
Flutter - 如何在没有互联网的情况下从坐标获取国家?