iOS 獲取當前網路狀態(轉載)
轉載自:http://blog.csdn.net/u014483033/article/details/39229417
獲取iOS網路狀態,我目前知道的有兩種辦法。
方法一:Reachability。
相信大家使用最多的方法就是使用Reachability
這是蘋果的官方演示demo中使用到的方法。
1、首先你需要下載並匯入Reachability。這是蘋果官方演示demo,把裡面的Reachability檔案拷貝到自己的工程。下載地址:https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html
2、匯入SystemConfiguration.framework框架。
3、分析reachability中的程式碼含義,可以看到以下三種網路狀態:無網路,wifi和蜂窩網。
- typedef enum : NSInteger {
- NotReachable = 0,//沒有網路
- ReachableViaWiFi,//當前使用Wifi網路
- ReachableViaWWAN//使用的蜂窩網路
- } NetworkStatus;
4、獲取網路狀態的程式碼
- #pragma mark - 獲取網路狀態
- +(NSString *)internetStatus {
-
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];
- NetworkStatus internetStatus = [reachability currentReachabilityStatus];
- NSString *net = @"wifi";
- switch (internetStatus) {
- case ReachableViaWiFi:
- net = @"wifi";
- break;
- case ReachableViaWWAN:
- net = @"wwan";
- break;
- case NotReachable:
- net = @"notReachable";
- default:
- break;
- }
- return net;
- }
值得一提的是HostName改成"www.baidu.com"或者其他中國網站時經常會獲取網路狀態錯誤,不能得到正確的網路狀態。所以最好使用蘋果的網站“www.apple.com
”
這種方法是目前最普遍的使用方式,由於是蘋果官方demo,所以比較權威。但是這種方法的缺點是不能知道使用者使用的手機網路是2G、3G還是4G。
這樣就有了第二種獲取網路狀態的方法。
方法二:
這種方法通過監聽手機的statusbar的狀態還獲取使用者的網路狀態。可以通過蘋果的稽核在Appstore上架。程式碼量非常小,簡單易懂,最重要的是能區分2G、3G、4G、LTE。話不多說,直接上程式碼。
- + (NSString *)networkingStatesFromStatebar {
- // 狀態列是由當前app控制的,首先獲取當前app
- UIApplication *app = [UIApplication sharedApplication];
- NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
- int type = 0;
- for (id child in children) {
- if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
- type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
- }
- }
- NSString *stateString = @"wifi";
- switch (type) {
- case 0:
- stateString = @"notReachable";
- break;
- case 1:
- stateString = @"2G";
- break;
- case 2:
- stateString = @"3G";
- break;
- case 3:
- stateString = @"4G";
- break;
- case 4:
- stateString = @"LTE";
- break;
- case 5:
- stateString = @"wifi";
- break;
- default:
- break;
- }
- return stateString;
- }
不過需要注意的是,使用這種方法時一定要保證statusbar沒有隱藏。如果你的App隱藏了statusbar,那麼你也就不能通過這種方法獲得網路狀態。