Objective-C决定了iOS设备的数据networkingtypes
我在一个从服务器接收数据的应用程序,问题是当用户连接到cellular data
(不是3G
或WIFI
),它需要很长时间才能接收数据。
我已经从这个答案实现了这个代码,但我不知道它是否有效,有时它给我一个准确的types,有时它不。
这里是我的代码:
- (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
不隐藏,然后应用程序将获得有关networkingtypes的文本。
如果使用iOS 7
+,则可以从CoreTelephony
框架获取信息,方法如下:
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new]; NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
定义的可能值如下: CTRadioAccessTechnologyGPRS
, CTRadioAccessTechnologyEdge
, CTRadioAccessTechnologyWCDMA
, CTRadioAccessTechnologyLTE
等
情况1,与NSLog(@"2G");
手机是常规蜂窝数据,而不是3G,不是4G,而不是WiFi。
你应该做的是在2G的NSLog下面插入代码,以防止数据传输。