iphone - network - swift reachability carthage




Objective-Cは、iOSデバイスのデータネットワークタイプを決定します。 (2)

Status barがアプリケーションに隠されていないことを確認してください。 表示されていない場合、コードはStatus barテキストをすべて読み込むため、常にNo wifi or cellularは表示されNo wifi or cellular

これは問題を解決する最善の方法です。 Status bar非表示にしておけば、アプリケーションはネットワークタイプに関するテキストを取得します。

サーバーからデータを受信するアプリケーションでは、問題はユーザーがcellular data3GWIFIはない)に接続するとき、データを受信するまでに時間がかかることです。

私はこのAnswerからこのコードを実装しましたが、効果的かどうかはわかりませんが、時には正確なタイプを与えていることもあります。

ここに私のコードです:

- (void)newtworkType {

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

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

switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) {
    case 0:
        NSLog(@"No wifi or cellular");
        break;

    case 1:
        NSLog(@"2G");
        break;

    case 2:
        NSLog(@"3G");
        break;

    case 3:
        NSLog(@"4G");
        break;

    case 4:
        NSLog(@"LTE");
        break;

    case 5:
        NSLog(@"Wifi");
        break;


    default:
        break;
}}

私はApple Reachabilityの例を試しましたが、reachabilityForInternetConnectionreachabilityForInternetConnectionかどうかを判断できますが、それは私の場合は役に立たないです。

前もって感謝します。


iOS 7 +を使用している場合、 CoreTelephonyフレームワークから次の方法で情報を取得できます。

CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);

取得できる定義済みの値は、次のとおりですCTRadioAccessTechnologyGPRSCTRadioAccessTechnologyEdgeCTRadioAccessTechnologyWCDMACTRadioAccessTechnologyLTEなど





cellular-network