是否可以确定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
的类别Capabilities
和Hardware
,尝试这样做,但可能在应用商店中不可用。
这些都无助于外部插入式GPS或外部蓝牙GPS设备。
if (location.getHoricontalAccuracy()< 40) {
// for sure GPS
} else {
// no GPS or unusable bad GPS
}
你也可以使用速度和航向,如果它们有效,那么它们来自GPS,因为它是唯一可以测量速度和航向的传感器。(magentometer显示当前航向,无需GPS即可工作)