看到网上不少人都在用Reachability加工的方法来判断2G/3G状态,我也小试了一把,发现存在着很多问题,常常判断出来的状态是NULL,没法准肯定位到用户是否使用的2G/3G。。 终于有一种新鲜可靠的方法出现了,不论用户是否隐藏了statusBar,均可以准确判断出用户网络状况,这个就是遍历StatusBar的图标。。。经过查看用户statusBar的网络图标的视图,而后根据视图的类型值来判断出是什么网络状态。(不过越狱的用户能够刷statusBar,没有测试过这个方法还能够不能够) 功能块的代码以下: + (NSString *)currentNetWorkStatusString { NSString *netWorkStatus ; 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; } } NSNumber * num = [dataNetworkItemView valueForKey:@"dataNetworkType"]; if (num == nil) { netWorkStatus = nil; }else{ int n = [num intValue]; if (n == 0) { netWorkStatus = nil; }else if (n == 1){ netWorkStatus = @"2G"; }else if (n == 2){ netWorkStatus = @"3G"; }else{ netWorkStatus = @"WiFi"; } } return netWorkStatus; }