iOSアプリで作業していますが、デバイスのセルラー接続の種類を確認したいと思います。
私は自分のデバイスが使用しているセルラーネットワークの種類に最も興味があります:2Gまたは3G、あるいはその他。
ただし、Reachability.hはwifiまたは3Gのチェックのみを提供します。
2G、3Gなどを確認するにはどうすればよいですか?
iOSアプリで作業していますが、デバイスのセルラー接続の種類を確認したいと思います。
私は自分のデバイスが使用しているセルラーネットワークの種類に最も興味があります:2Gまたは3G、あるいはその他。
ただし、Reachability.hはwifiまたは3Gのチェックのみを提供します。
2G、3Gなどを確認するにはどうすればよいですか?
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
}
Reachability.h
iPhoneはネットワークタイプ情報(WWAN、WiFi、ネットワークなし)のみをAPIに提供するため、2G/3Gは他のサードパーティライブラリを介して区別することはできません。
ただし、2Gまたは3GネットワークのIP範囲を知ることができれば、iPhoneが使用しているネットワーク速度/周波数を判断できます。
この手法を使用して、EDGEと3Gを区別できます。3GとEdgeの判断
私が見つけた最良の方法:
+ (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を返します。
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をインポートします