2012-03-05 10 views
2

iOSアプリケーションを使用していて、携帯端末の携帯電話接続の種類を判別する必要があります。iOSで携帯電話のネットワークタイプを確認する

私のデバイスが使用している携帯電話ネットワークの種類に最も関心があります.2Gまたは3Gなどです。

ただし、Reachability.hはWi-Fiまたは3Gのチェックのみを提供します。

2G、3Gなどの確認方法を教えてください。

+0

ios sdkには多くの制限があります.2g/3g/LTEのアイデンティティチェックはありません。 –

答えて

12

2G/3Gは、Reachability.hまたは他のサードパーティのライブラリでは区別できません。iPhoneにはネットワークタイプ情報(WWAN、WiFi、ネットワークなし)のみがAPIとして提供されています。

しかし、2Gまたは3Gネットワ​​ークのIP範囲を知ることができれば、iPhoneが使用しているネットワーク速度/周波数を判断できます。

+0

[?この答えは絶対に正しい= = – 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を返します。