看到網上不少人都在用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; }