requestLocation() 无法提供有关手表硬件的课程,但在 Sim 中工作

Posted

技术标签:

【中文标题】requestLocation() 无法提供有关手表硬件的课程,但在 Sim 中工作【英文标题】:requestLocation() fails to provide Course on watch hardware but work in Sim 【发布时间】:2019-01-04 00:33:37 【问题描述】:

我编写了一个使用 GPS 的独立 Applewatch 应用程序。为了做一个好公民并尽量减少功耗,我正在使用单次定位请求方法。在 Xcode sim 上,这可以正常工作,提供位置、路线和速度(当使用 sim 中记录的动作之一时)。在真正的硬件上,我得到准确的经纬度数据,但课程总是返回“-1”。注意:我不是在寻找航向数据,因为手表中没有磁力计硬件。我想从 GPS 定位中的 ∆X,Y 越过地面。预期的行为是它不应该在 Sim 中使用单次 requestLocation() 来工作,但既然可以,为什么不能在真实的东西上工作呢?有没有其他人看过这个?这是 Radar 的错误还是功能?

我想如果已知这种方法会失败,我可以尝试 startUpdating() 直到看到课程,然后停止更新,但 Apple 表示这是一种耗电的方法。

【问题讨论】:

继续实验,看来课程问题取决于 CLLocationManager 实例的属性:当 locationMgr.desiredAccuracy = kCLLocationAccuracyKilometer locationMgr.distanceFilter = kCLDistanceFilterNone locationMgr.activityType = .otherNavigation 没有课程报告硬件(Sim 会报告),\n但当 locationMgr.desiredAccuracy = kCLLocationAccuracyBest locationMgr.distanceFilter = kCLDistanceFilterNone locationMgr.activityType = .otherNavigation 时,手表会报告路线。 【参考方案1】:

继续实验,看来课程问题取决于 CLLocationManager 实例的属性:何时

locationMgr.desiredAccuracy = kCLLocationAccuracyKilometer
locationMgr.distanceFilter = kCLDistanceFilterNone
locationMgr.activityType = .otherNavigation  



No course reported by hardware(Sim does report),but when

locationMgr.desiredAccuracy = kCLLocationAccuracyBest
locationMgr.distanceFilter = kCLDistanceFilterNone
locationMgr.activityType = .otherNavigation

然后手表会报告路线。 .DistanceFilter 似乎应该与 ∆X,∆Y 报告相关,但为什么 .desiredAccuracy 很重要?

顺便说一句,原始代码的精度为 1 公里,因为 Apple 指出提高精度会增加功耗。

【讨论】:

以上是关于requestLocation() 无法提供有关手表硬件的课程,但在 Sim 中工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在继续之前等待 requestLocation?

requestLocation() 不请求许可,即使“下次询问”被勾选

调用 requestLocation() 时的“线程 1:信号 Sigabrt”

CoreLocation CLLocationManager requestLocation 需要 10 秒才能得到回调

尝试使用 company-rust 时,即使提供了正确的路径,公司也无法找到赛车手

小米手环可以支持苹果手机吗