CLLocationManager 不适用于非无线连接?
Posted
技术标签:
【中文标题】CLLocationManager 不适用于非无线连接?【英文标题】:CLLocationManager does not work for non-wireless connection? 【发布时间】:2011-03-30 21:09:09 【问题描述】:我有一个 Mac 应用程序并想使用核心位置,但是,当我不在 wifi 上但使用以太网电缆连接时,核心位置 (CLLocationManager) 报告操作无法完成。
确切的错误信息是
The operation couldn't be completed. (kCLErrorDomain error 0.)
如果我总是连接到同一个路由器(即 wifi 或以太网电缆),为什么 CLLocationManager 仅适用于 wifi 而不适用于以太网连接?
任何建议将不胜感激。
谢谢。
编辑:
这是一些代码。
我将我的位置管理器定义为这样的实例变量
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:ICMinimumUpdateDistance];
然后我像这样监控位置管理器的委托方法,
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
// Filter out points before the last update
NSTimeInterval timeSinceLastUpdate = [newLocation.timestamp timeIntervalSinceDate:dateOfLastUpdate];
if (timeSinceLastUpdate > 0)
//Do stuff
我还使用委托方法检查错误
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
NSLog(@"Location Error:%@", [error localizedDescription]);
在上面的代码中,位置管理器使用无效的 newLocation(错误的时间戳)进行更新,然后位置管理器调用委托错误方法。
【问题讨论】:
但是当您无线连接时它可以工作?你能发布一些你正在使用的代码吗? 是的,它可以无线工作,但在我使用以太网连接时失败了。请查看我正在使用的代码的更新。 【参考方案1】:由于您的笔记本电脑中没有 GPS,OSX 上的 core-location 使用 (skyhook) 服务或类似的服务。
该服务维护一个查询 WIFI 接入点及其位置的数据库(可能由启用 GPS 和 wifi 的 iPhone 更新)。
因此,通过输入您可以看到的接入点列表以及它们的相对信号强度,系统能够大致确定您所在的位置。
因此,您需要启用 wifi 和有效的互联网链接(但互联网不需要通过 wifi,您可以不关联机场)
【讨论】:
这很有趣。今晚回家后我会试试的。【参考方案2】:我也注意到了这一点。如果您在通过以太网连接到 Internet 时打开“系统偏好设置”中“日期和时间”窗格的“时区”选项卡,它会显示连接到无线网络以确定您当前的位置。这让我相信 CoreLocation 实际上确实需要无线连接。
【讨论】:
你知道技术原因吗?最终这两种方法都通过同一个路由器。 我不确定。你会认为这不会有什么不同。奇怪的是,如果我通过以太网连接,我使用 CoreLocation 的应用实际上会返回上次成功检索位置时的位置。 是的,我的也是这样。如果在第一次更新后监控委托错误方法,会报错。 是的,它仅限于 WiFi 真是太可惜了。希望苹果能改变这一点。以上是关于CLLocationManager 不适用于非无线连接?的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式排除非 golang 文件不适用于 inotifywait
Apple Push Notification 不适用于非开发的临时构建