21

サーバーからデータを受信するアプリケーションを使用している場合、ユーザーがcellular data(Not3GまたはWIFI) に接続すると、データを受信するのに時間がかかります。

私はこの回答からこのコードを実装しましたが、それが効果的かどうかはわかりません。正確な型が得られることもあれば、そうでないこともあります。

ここに私のコードがあります:

- (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 exampleを試しましたが、私の場合は役に立たないかどうreachabilityForInternetConnectionかを判断できます。reachabilityForLocalWiFi

前もって感謝します。

4

3 に答える 3

29

+を使用すると、次のメソッドのフレームワークiOS 7から情報を取得できます。CoreTelephony

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

取得できる定義済みの可能な値は次のとおりです : CTRadioAccessTechnologyGPRSCTRadioAccessTechnologyEdgeCTRadioAccessTechnologyWCDMAなどCTRadioAccessTechnologyLTE

于 2013-12-19T19:27:52.000 に答える
16

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

これが問題を解決する最善の方法です。Status bar非表示にしないようにするだけで、アプリケーションはネットワークの種類に関するテキストを取得します。

于 2013-06-03T14:33:33.567 に答える
0

ケース 1NSLog(@"2G");は、電話が 3G、4G、WiFi ではなく、通常のセルラー データを使用している場合です。

すべきことは、データ転送を防ぐために 2G の NSLog の下にコードを挿入することです。

于 2013-05-27T16:48:23.013 に答える