iOS 實時監(jiān)聽網(wǎng)絡變化

最近項目中遇到了要判斷用戶是以哪種上網(wǎng)方式,再做不同的操作,每次主動讀取網(wǎng)絡狀態(tài)重復代碼太多,因此找到了兩種監(jiān)聽網(wǎng)絡被動響應的方法。

AFNetworkReachabilityManager

  • 添加框架
pod 'AFNetworking', '~> 2.6.3'
  • 導入頭文件
#import "AFNetworking.h"
  • 監(jiān)聽網(wǎng)絡
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self listenNetWorkingStatus];  //監(jiān)聽網(wǎng)絡是否可用
}
-(void)listenNetWorkingStatus{
   //1:創(chuàng)建網(wǎng)絡監(jiān)聽者
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager manager];
    //2:獲取網(wǎng)絡狀態(tài)
    /*
     AFNetworkReachabilityStatusUnknown          = 未知網(wǎng)絡,
     AFNetworkReachabilityStatusNotReachable     = 沒有聯(lián)網(wǎng)
     AFNetworkReachabilityStatusReachableViaWWAN = 蜂窩數(shù)據(jù)
     AFNetworkReachabilityStatusReachableViaWiFi = 無線網(wǎng)
     */
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知網(wǎng)絡");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"沒有聯(lián)網(wǎng)");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"蜂窩數(shù)據(jù)");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"無線網(wǎng)");
                break;
            default:
                break;
        }
    }];
    
    //開啟網(wǎng)絡監(jiān)聽
    [manager startMonitoring];
}

RealReachability

  • 添加框架
pod 'RealReachability', '~> 1.1.2'
  • 導入頭文件
#import "RealReachability.h"
  • 監(jiān)聽網(wǎng)絡
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     [self listenNetWorkingStatus]; //監(jiān)聽網(wǎng)絡是否可用
}
-(void)listenNetWorkingStatus{
    [GLobalRealReachability startNotifier];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(networkChanged:)
                                                 name:kRealReachabilityChangedNotification
                                               object:nil];
    ReachabilityStatus status = [GLobalRealReachability currentReachabilityStatus];
    [self realNetworkingStatus:status];
}

- (void)networkChanged:(NSNotification *)notification
{
    RealReachability *reachability = (RealReachability *)notification.object;
    ReachabilityStatus status = [reachability currentReachabilityStatus];
    [self realNetworkingStatus:status];
}
-(void)realNetworkingStatus:(ReachabilityStatus)status{
    switch (status)
    {
        case RealStatusUnknown:
        {
            NSLog(@"~~~~~~~~~~~~~RealStatusUnknown");
            break;
        }
            
        case RealStatusNotReachable:
        {
            NSLog(@"~~~~~~~~~~~~~RealStatusNotReachable");
            break;
        }
            
        case RealStatusViaWWAN:
        {
            NSLog(@"~~~~~~~~~~~~~RealStatusViaWWAN");
            break;
        }
        case RealStatusViaWiFi:
        {
            NSLog(@"~~~~~~~~~~~~~RealStatusViaWiFi");
            break;
        }
        default:
            break;
    }
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容