Проверка типа сотовой сети в iOS - PullRequest
2 голосов
/ 05 марта 2012

Я работаю над приложением для iOS и хочу определить, какой тип сотовой связи имеется на устройстве.

Меня больше всего интересует тип сотовой сети, которую использует мое устройство: 2G или 3G или другое.

Тем не менее, Reachability.h предоставляет только проверку Wi-Fi или 3G.

Как я могу проверить наличие 2G, 3G и т. Д.?

Ответы [ 5 ]

13 голосов
/ 17 ноября 2014

в iOS 7.0+ у нас есть платформа CoreTelephony, которая может предоставить нам необходимую информацию о типе сети.

CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
    NSString *currentRadio = telephonyInfo.currentRadioAccessTechnology;
    if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) {
        // LTE

    } else if([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) {
        // EDGE

    } else if([currentRadio isEqualToString:CTRadioAccessTechnologyWCDMA]){
        // 3G

    }
12 голосов
/ 05 марта 2012

2G / 3G нельзя распознать с помощью Reachability.h или любых других сторонних библиотек, поскольку iPhone предоставляет только информацию о типе сети (WWAN, WiFi, без сети) для API.

Однако, если вы знаете диапазон IP-адресов сетей 2G или 3G, вы можете определить, какую скорость / частоту сети использует iPhone.

1 голос
/ 04 ноября 2015

Лучший метод, который я нашел:

+ (NSNumber *)dataNetworkTypeFromStatusBar {

UIApplication *app = [UIApplication sharedApplication];
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"]    subviews];
NSNumber *dataNetworkItemView = nil;

for (id subview in subviews) {
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
        dataNetworkItemView = subview;
        break;
    }
}
return [dataNetworkItemView valueForKey:@"dataNetworkType"]; }

    /* Where
    0 = No wifi or cellular
    1 = 2G and earlier
    2 = 3G
    3 = 4G
    4 = LTE
    5 = Wifi
    */

Поскольку метод проверяет значение строки состояния, убедитесь, что строка состояния не скрыта в вашем приложении. Если он не виден, метод всегда будет возвращать 0.

1 голос
/ 09 июля 2012

Вы можете определить EDGE из 3G с помощью этой техники: Определение 3G против Edge

0 голосов
/ 31 октября 2018

Для Swift 4

let telephonyInfo = CTTelephonyNetworkInfo()
    let currentRadio = telephonyInfo.currentRadioAccessTechnology
    if (currentRadio == CTRadioAccessTechnologyLTE) {
        // LTE
        print("LTE")
    } else if (currentRadio == CTRadioAccessTechnologyEdge) {
        // EDGE
          print("EDGE")
    } else if (currentRadio == CTRadioAccessTechnologyWCDMA) {
        // 3G
         print("3G")
    }
    else if(currentRadio==CTRadioAccessTechnologyHSDPA){
        // HSDPA
        print("HSDPA")
    }

Примечание: импорт CoreTelephony

...