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

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

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

于 2012-03-05T03:28:44.067 に答える
1

この手法を使用して、EDGEと3Gを区別できます。3GとEdgeの判断

于 2012-07-09T18:02:45.193 に答える
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 に答える
1

Swift4の場合

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 に答える