【iOS】 獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)

獲取iOS網(wǎng)絡(luò)狀態(tài),我目前知道的有兩種辦法。

方法一:Reachability。
相信大家使用最多的方法就是使用Reachability
這是蘋果的官方演示demo中使用到的方法。

  • 1、首先你需要下載并導(dǎo)入Reachability。這是蘋果官方演示demo,把里面的Reachability文件拷貝到自己的工程。下載地址:https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html
  • 2、導(dǎo)入SystemConfiguration.framework框架。
  • 3、分析reachability中的代碼含義,可以看到以下三種網(wǎng)絡(luò)狀態(tài):無(wú)網(wǎng)絡(luò),wifi和蜂窩網(wǎng)。

typedef enum : NSInteger {
NotReachable = 0,//沒(méi)有網(wǎng)絡(luò)
ReachableViaWiFi,//當(dāng)前使用Wifi網(wǎng)絡(luò)
ReachableViaWWAN//使用的蜂窩網(wǎng)絡(luò)
} NetworkStatus;



* 4、獲取網(wǎng)絡(luò)狀態(tài)的代碼


`#pragma mark - 獲取網(wǎng)絡(luò)狀態(tài)
+(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"或者其他中國(guó)網(wǎng)站時(shí)經(jīng)常會(huì)獲取網(wǎng)絡(luò)狀態(tài)錯(cuò)誤,不能得到正確的網(wǎng)絡(luò)狀態(tài)。所以最好使用蘋果的網(wǎng)站"www.apple.com"
這種方法是目前最普遍的使用方式,由于是蘋果官方demo,所以比較權(quán)威。但是這種方法的缺點(diǎn)是不能知道用戶使用的手機(jī)網(wǎng)絡(luò)是2G、3G還是4G。

###這樣就有了第二種獲取網(wǎng)絡(luò)狀態(tài)的方法。

#方法二:

>這種方法通過(guò)監(jiān)聽(tīng)手機(jī)的statusbar的狀態(tài)還獲取用戶的網(wǎng)絡(luò)狀態(tài)。可以通過(guò)蘋果的審核在Appstore上架。代碼量非常小,簡(jiǎn)單易懂,最重要的是能區(qū)分2G、3G、4G、LTE。話不多說(shuō),直接上代碼。

  • (NSString *)networkingStatesFromStatebar {
    // 狀態(tài)欄是由當(dāng)前app控制的,首先獲取當(dāng)前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;

>###不過(guò)需要注意的是,使用這種方法時(shí)一定要保證statusbar沒(méi)有隱藏。如果你的App隱藏了statusbar,那么你也就不能通過(guò)這種方法獲得網(wǎng)絡(luò)狀態(tài)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容