检测GPS是否可用iPad(内部蜂窝或外部蓝牙)



是否可以确定iPAD是否真的有GPS信号。我能想到三种情况

  • Wifi专用IPAD
  • Wifi专用IPAD,带外部GPS(如DualXGPS)
  • 带内置GPS的车载IPAD

苹果文档提到:

一些定位服务需要在给定的设备。例如,标题信息仅可用适用于包含硬件指南针的设备。此类定义可以用来确定哪些服务当前可用。

是否有专门适用于GPS的特定呼叫,如航向或跟踪?我假设可能只有GPS设备有航向呼叫,因为文件上写着:

在iOS中,具有适当硬件的设备也可能报告标题信息当headingAvailable属性中的值为YES时,您可以使用位置管理器对象来检索标题信息。

之前的一些帖子建议尝试锁定非常准确的GPS更新

  • 检测设备是否有GPS
  • 如何判断iOS设备是否有GPS

但我希望有一些更具体的东西,这些方法"感觉"很空洞——因为仅仅因为不准确的GPS信号可能看起来没有GPS,而设备实际上有能力。此外,我认为一个可以"模拟gps"的wifi设备也可能会通过其中一种条件。

谢谢你的帮助!

最简单的答案是,你应该试着以你需要的精度使用GPS,看看你是否能获得它。并处理这样一个事实,即你可能无法获得这种精度,因为用户在建筑物或城市峡谷中,或者没有GPS硬件,或者关闭了定位服务(尽管这是可以检测到的)。

如果你的精度超过100米,或者CLLocation有高度,你几乎肯定有GPS硬件(但你必须等待相当长的时间才能锁定至少4颗卫星的信号才能获得高度)。如果您有蜂窝无线电连接(请参阅可达性),则您有GPS硬件(iPhone 1除外)。如果你有数字罗盘功能,那么你就有GPS硬件(iPhone 3G除外)。

内部GPS硬件可在所有配备蜂窝式收音机的iPhone和iPad上使用(iPhone 1除外,请参阅wiki图表)。如果你研究一下这张图表,就会发现(到目前为止)除了iPhone 3G之外,所有拥有GPS硬件的设备都有数字罗盘(磁力计)。

CLLocation使用course(如这里所建议的)仅在设备移动足够快并且GPS具有卫星锁定的情况下有效。一个更好的选择是检测你是否有来自指南针(磁力计)的heading

您可以使用硬件字符串来确定设备功能,方法是对硬件具有哪些功能的表进行硬编码(此处介绍)。当引入新设备时,必须不断更新(这意味着应用程序更新)。Erica Sadun在github上有UIDevice的类别CapabilitiesHardware,尝试这样做,但可能在应用商店中不可用。

这些都无助于外部插入式GPS或外部蓝牙GPS设备。

if (location.getHoricontalAccuracy()< 40) {
// for sure GPS
} else {
// no GPS or unusable bad GPS
}

你也可以使用速度和航向,如果它们有效,那么它们来自GPS,因为它是唯一可以测量速度和航向的传感器。(magentometer显示当前航向,无需GPS即可工作)

最新更新