Mut*_*awe 20 iphone objective-c internet-connection cellular-network ios
我在一个从服务器接收数据的应用程序,问题是当用户连接到cellular data
(Not 3G
或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;
}}
Run Code Online (Sandbox Code Playgroud)
这是我能做的最好吗??,我尝试了Apple Reachability的例子,但它可以确定是否reachabilityForInternetConnection
或只是reachabilityForLocalWiFi
但在我的情况下没有帮助.
提前致谢.
muz*_*uzz 28
如果使用iOS 7
+那么您可以从CoreTelephony
框架中获取以下方法的信息:
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
Run Code Online (Sandbox Code Playgroud)
是定义你会得到候选条件值如下:
CTRadioAccessTechnologyGPRS
,CTRadioAccessTechnologyEdge
,CTRadioAccessTechnologyWCDMA
,CTRadioAccessTechnologyLTE
等
M.A*_*ash 15
确保Status bar
您的应用程序中没有隐藏它.如果它不可见,它将始终返回,No wifi or cellular
因为您的代码读取Status bar
所有内容中的文本.
这是解决问题的最佳方法,只需使Status bar
隐藏,然后应用程序将获得有关网络类型的文本.