iOS:是不是可以要求核心位置框架仅使用蜂窝塔或仅使用 WiFi 或使用 GPS 天线获取位置?

Posted

技术标签:

【中文标题】iOS:是不是可以要求核心位置框架仅使用蜂窝塔或仅使用 WiFi 或使用 GPS 天线获取位置?【英文标题】:iOS: Is it possible to ask core location framework to fetch location using only cell tower or only WiFi or using GPS antennas?iOS:是否可以要求核心位置框架仅使用蜂窝塔或仅使用 WiFi 或使用 GPS 天线获取位置? 【发布时间】:2013-12-18 04:40:13 【问题描述】:

我正在尝试使用 Core Location 框架在 ios 应用程序中获取位置数据。我正在使用下面的代码 sn-p 来启动位置管理器。

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = 5;

我了解我可以使用 desiredAccuracy 参数更改位置数据的准确性。但实际上核心位置是如何工作的?它是否使用 GPS 天线或 WiFi 或手机信号塔获取?我可以要求位置管理器仅使用 GPS 或仅使用 WiFi 或仅使用蜂窝塔进行获取吗?

【问题讨论】:

您无法控制如何确定位置。 【参考方案1】:

正如 rmaddy 所说,您无法控制如何确定位置。换句话说,您不能要求应用/设备使用 GPS/CellTower/Wifi 之一。

但是,您可以通过位置更新的类型,告诉应用是“偏爱”GPS 还是手机信号塔。

如果你这样做:

[locationManager startUpdatingLocation];

那么该应用肯定会使用 GPS + 也许是 wifi 和/或手机信号塔。

如果你这样做:

[locationManager startMonitoringSignificantLocationChanges];

那么当您从一个基站移动到另一个基站时,该应用肯定会使用基站并提供位置更新。这应该会减少您的 GPS 使用量和电池使用量。话虽如此,我不确定在这种情况下是否完全消除了 GPS 的使用。

希望这能有所启发。

更新

查看苹果的链接: CLLocationManager Class Reference

但通常你总是可以得到一个更新(将通过委托方法到达)然后使用:

[locationManager stopMonitoringSignificantLocationChanges];

您将需要做更多的工作并检查该位置的时间戳,以确保更新不是旧缓存之一。

【讨论】:

如果我只想将它用于一次位置更新并且我不需要不时更新,那么 [locationManager startMonitoringSignificantLocationChanges] 将如何工作? 谢谢.. :-) 在 [locationManager stopMonitoringSignificantLocationChanges] 的情况下,同样的委托方法 locationManager:didUpdateLocations: 是否会被调用? 我现在面临一个问题。你能告诉我应该在哪里调用 [locationManager startUpdatingLocation] 方法吗?我必须在 viewDidLoad 中执行此操作还是可以通过单击按钮执行此操作? 两者都很好。这真的取决于你的应用逻辑。 让我们continue this discussion in chat【参考方案2】:

您不能强制 CL 使用 GPS 或 Wifi 或手机,但您可以设置 desiredAccuracy 以便它可能会执行您想要的操作。

如果您将 desiredAccuracy 设置为 500 或更高,它将使用 Wifi 或蜂窝网络(如果可用),并关闭 GPS。如果将 desiredAccuracy 设置为 300 或更低,则必须使用 GPS。

【讨论】:

谢谢.. 但是你怎么能这么确定这些距离值呢?

以上是关于iOS:是不是可以要求核心位置框架仅使用蜂窝塔或仅使用 WiFi 或使用 GPS 天线获取位置?的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationmanager 中的 GPS 位置更新

动态编程:带有记忆的递归是不是可以与任何递归解决方案或仅特定格式的解决方案一起使用?

将字母和数字匹配在一起或仅匹配字母的正则表达式

如何确定 DLL 是不是需要完整的 .NET 4 或仅需要客户端配置文件

在应用程序中仅使用 WiFi 连接(不是蜂窝网络)?

是否可以将 Websockets/Socket.IO 与蜂窝数据/4g 一起使用?