如何判断iOS设备是否具有GPS?

12

对于iPad或iPod Touch设备,有没有一种方法可以找出设备是否具有GPS功能?

额外奖励分:如果iPad本身没有,但它连接了第三方GPS设备,我能确定这一点吗?


你可能想看一下这个 SO 回答是否解决了你的问题:http://stackoverflow.com/questions/6907584/check-whether-a-cllocation-is-based-on-gps-or-cellular/6913657#6913657 - pythonquick
除了 iPhone 2G,所有 iOS 设备都有 GPS 吗? - darksky
@Nayefc:不,iPod Touch(迄今为止的所有型号)都没有GPS。 - Adam Rosenfield
1
iPad/iTouch设备没有蜂窝网络支持,因此没有GPS。 - Brad
4个回答

11

苹果没有提供直接查询设备是否具有GPS功能的功能。 您可以通过以下两种方法解决问题:

  1. 查询设备类型并根据此确定其是否具有GPS。 可以在这里找到详细描述。

  2. 苹果推荐的方法:查看他们的文档(“确定可用硬件支持”部分)。 基本上,您需要创建一个CLLocationManager实例,并将所需精度设置为最高级别,然后可以查询其精度; 如果它不是非常准确,则很可能该设备没有GPS。

希望这可以帮到您。 :)


不是我“想要”的答案,但它仍然是正确的;-) - Brad
现在有关检测位置服务的修订建议已经发布在此处:https://developer.apple.com/documentation/corelocation/adding_location_services_to_your_app - JonH

4

对于 iOS 6 或更高版本,您可能想尝试

+ (BOOL)[CLLocationManager deferredLocationUpdatesAvailable]

根据文档:

延迟位置更新需要GPS硬件支持,可能不适用于所有的iOS设备。


聪明 - 谢谢!;-) - Brad
2
有些设备具有GPS,但deferredLocationUpdatesAvailable返回NO。因此,这并不适用于所有设备。 - Francesco verheye
@Francescoverheye,你知道这些设备通常是运行 < iOS 8 的旧设备吗? - Warpling
1
据我所知,这与iOS版本和设备的年龄无关。 - Francesco verheye
1
CLLocationManager.deferredLocationUpdatesAvailable() 在 iOS 10 中始终返回 false。 - Anshu

1

只有GPS可以提供位置属性:航向和速度。
而且通常情况下,你需要GPS才能获得精确的位置,没有GPS的设备将会提供一个getHoricontalAccuracy()高于30-40米的位置。(使用CLLLocationAccuracyBest的准确性设置)

所以在这种情况下,你没有准确的位置信息,可以忽略它。(无论设备是否具有GPS)

// Check if the device has GPS hardware available
public bool CheckGpsHardware()
{
    var value = false;

    CLLocationManager locationManager = new CLLocationManager();
    locationManager.DesiredAccuracy = CLLocation.AccuracyBest;

    if (CLLocationManager.LocationServicesEnabled)
    {
        locationManager.RequestLocation();
        if (locationManager.Location?.HorizontalAccuracy < 0)
        {
            // GPS hardware is not available
            value = false;
        }
        else
        {
            // GPS hardware is available
            value = true;
        }
    }
    else
    {
        // Location services are not available
        value = false;
    }

    return value;
}

0
下载高度计或类似的应用。在使用下载的应用之前关闭手机数据和Wi-Fi。然后启动应用程序,查看它是否能提供您当前的海拔高度。如果可以,说明您的手机具备GPS功能;如果不能,则说明没有。

2
我本来会给这个答案点个踩(如上评论所述),然而查看返回的“海拔”字段的想法还是不错的。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接