Question

I was looking for a way to detect whether an iOS device has a GPS unit or not, and I ran into this question. I found the last answer very interesting:

CTTelephonyNetworkInfo* netInfo = [[CTTelephonyNetworkInfo alloc] init];
if(netInfo) {
    CTCarrier* carrier = [netInfo subscriberCellularProvider];
    if([[carrier carrierName] length] <=0) {
        //NO operator=>NO 3G and no real GPS  
    }
}

I was looking for some confirmation as the the validity of this technique/whether or not it is entirely accurate. I don't have enough devices to test it myself.

Was it helpful?

Solution

After doing some digging, I've found this article from Apple which, as a footnote, explains that:

  • iOS devices without a cellular connection use only Wi-Fi for Location Services (if a Wi-Fi network is available).

  • GPS is available [only] on iPhone and iPad Wi-Fi + 3G models.

So it seems that detecting a cellular connection is a reliable way to determine whether or not and iOS device has a GPS unit. No cellular connection, no GPS.

Note that iOS supports external GPS units through bluetooth and dock connector. The above methods will tell whether the device has a internal GPS but not whether LocationManager will be able to provide GPS driven location updates.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top