サーバーからデータを受信するアプリケーションの場合、問題は、ユーザーがcellular data
(3G
またはWIFI
ではない)に接続すると、データを受信するのに時間がかかることです。
私はこれからこのコードを実装しました 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の例 、しかしそれはreachabilityForInternetConnection
または単にreachabilityForLocalWiFi
かどうかを判断できますが、私の場合は役に立ちません。
前もって感謝します。
Status bar
がアプリケーションで非表示になっていないことを確認してください。コードがNo wifi or cellular
のテキストを読み取るため、表示されていない場合は常にStatus bar
が返されます。
これは問題を解決するための最良の方法です。Status bar
を非表示にしないようにすると、アプリケーションはネットワークタイプに関するテキストを取得します。
iOS 7
+を使用している場合は、次の方法でCoreTelephony
フレームワークから情報を取得できます。
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
定義されている可能な値は次のとおりです:CTRadioAccessTechnologyGPRS
、CTRadioAccessTechnologyEdge
、CTRadioAccessTechnologyWCDMA
、CTRadioAccessTechnologyLTE
など
ケース1、NSLog(@"2G");
は、電話が3G、4G、WiFiではなく通常のセルラーデータ上にある場合です。
データ転送を防ぐために、NSLog for2Gの下にコードを挿入する必要があります。