2012-03-05 3 views
2

iOS 앱을 개발 중이며 기기에 어떤 유형의 셀룰러 연결이 있는지 확인하고 싶습니다.iOS에서 셀룰러 네트워크 유형 확인

내 장치가 사용하는 셀룰러 네트워크 종류 인 2G 또는 3G 또는 기타에 가장 관심이 있습니다.

그러나 Reachability.h는 wifi 또는 3G에 대한 확인 만 제공합니다.

어떻게 2G, 3G 등을 확인할 수 있습니까?

+0

ios sdk에는 많은 제한이 있습니다. 2g/3g/LTE의 신원 확인은 없습니다. 개발 시작 후 가난하다고 느낀다 –

+0

[3G 대 에지 결정] (http://stackoverflow.com/questions/8400340/determining-3g-vs-edge) – BB9z

답변

12

iPhone은 네트워크 유형 정보 (WWAN, Wi-Fi, 네트워크 없음) 만 API에 제공하기 때문에 2G/3G는 Reachability.h 또는 기타 타사 라이브러리를 통해 구분할 수 없습니다.

그러나 2G 또는 3G 네트워크의 IP 범위를 알면 iPhone이 사용하는 네트워크 속도/주파수를 결정할 수 있습니다.

+0

누가 -1일까요? 이 대답은 절대적으로 정확합니다 = = – Raptor

12

를 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 

    } 
2

내가 발견 한 가장 좋은 방법 방법부터

+ (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을 반환합니다.