2

我正在开发一个 iOS 应用程序,并且想确定设备具有哪种类型的蜂窝连接。

我对我的设备使用的蜂窝网络类型最感兴趣:2G 或 3G,或其他。

但是,Reachability.h 仅提供对 wifi 或 3G 的检查。

如何检查 2G、3G 等?

4

5 回答 5

15

在 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

    }
于 2014-11-17T11:01:00.493 回答
12

2G / 3G 无法通过Reachability.h或任何其他第三方库进行区分,因为 iPhone 仅向 API 提供网络类型信息(WWAN、WiFi、无网络)。

但是,如果您能够知道 2G 或 3G 网络的 IP 范围,则可以确定 iPhone 使用的网络速度/频率。

于 2012-03-05T03:28:44.067 回答
1

您可以使用以下技术从 3G 中区分 EDGE:Determining 3G vs Edge

于 2012-07-09T18:02:45.193 回答
1

对于斯威夫特 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

于 2018-10-31T14:47:02.250 回答
1

我发现的最好的方法:

+ (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。

于 2015-11-04T20:02:10.367 回答