【问题标题】:CLLocationManager does not work for non-wireless connection?CLLocationManager 不适用于非无线连接?
【发布时间】: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(错误的时间戳)进行更新,然后位置管理器调用委托错误方法。

【问题讨论】:

  • 但是当您无线连接时它可以工作?你能发布一些你正在使用的代码吗?
  • 是的,它可以无线工作,但在我使用以太网连接时失败了。请查看我正在使用的代码的更新。

标签: cocoa macos core-location cllocationmanager


【解决方案1】:

由于您的笔记本电脑中没有 GPS,OSX 上的 core-location 使用 (skyhook) 服务或类似的服务。

该服务维护一个查询 WIFI 接入点及其位置的数据库(可能由启用 GPS 和 wifi 的 iPhone 更新)。

因此,通过输入您可以看到的接入点列表以及它们的相对信号强度,系统能够大致确定您所在的位置。

因此,您需要启用 wifi 和有效的互联网链接(但互联网不需要通过 wifi,您可以不关联机场)

【讨论】:

  • 这很有趣。今晚回家后我会试试的。
【解决方案2】:

我也注意到了这一点。如果您在通过以太网连接到 Internet 时打开“系统偏好设置”中“日期和时间”窗格的“时区”选项卡,它会显示连接到无线网络以确定您当前的位置。这让我相信 CoreLocation 实际上确实需要无线连接。

【讨论】:

  • 你知道技术原因吗?最终这两种方法都通过同一个路由器。
  • 我不确定。你会认为这不会有什么不同。奇怪的是,如果我通过以太网连接,我使用 CoreLocation 的应用实际上会返回上次成功检索位置时的位置。
  • 是的,我的也是这样。如果在第一次更新后监控委托错误方法,会报错。
  • 是的,它仅限于 WiFi 真是太可惜了。希望苹果能改变这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2013-12-02
  • 1970-01-01
  • 2012-08-16
  • 2018-11-24
  • 2015-05-28
相关资源
最近更新 更多