ios如何实时监控网络改变

作者: 一支烟一只猿 | 来源:发表于2017-01-19 09:23 被阅读686次

    最近看到一些app上有做到网络切换的时候,有提示有提醒是否使用4G/3G,回到wifi又可以马上回归,下面MARK下监听网络状态的代码:

    一、苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态

    使用之前请从Apple网站下载示例:http://xiazai.jb51.net/201608/yuanma/Reachability(jb51.net).rar

    然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。

    Reachability 中定义了3种网络状态:

    typedefenum: NSInteger {

    NotReachable = 0,//无连接

    ReachableViaWiFi,//使用WiFi网络

    ReachableViaWWAN//使用3G/GPRS网络

    } NetworkStatus;

    我们可以在程序启动以后启动实时监测

    // AppDelegate.m

    @interface AppDelegate ()

    @property (nonatomic, strong) Reachability *reachability;

    @end

    // 程序启动器,启动网络监视

    - (void)applicationDidFinishLaunching:(UIApplication *)application {

    // 设置网络检测的站点

    NSString *remoteHostName = @"www.apple.com";

    self.reachability = [Reachability reachabilityWithHostName:remoteHostName];

    // 设置网络状态变化时的通知函数

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)

    name:@"kNetworkReachabilityChangedNotification"object:nil];

    [self updateStatus];

    }

    - (void)reachabilityStatusChange:(NSNotification *)notification

    {

    Reachability* curReach = [notification object];

    NSParameterAssert([curReach isKindOfClass:[Reachabilityclass]]);

    [self updateInterfaceWithReachability:curReach];

    }

    - (void)updateInterfaceWithReachability:(Reachability *)reachability

    {

    if(reachability == _reachability)

    {

    NetworkStatus netStatus = [reachability currentReachabilityStatus];

    switch(netStatus)

    {

    caseNotReachable:   {

    NSLog(@"没有网络!");

    break;

    }

    caseReachableViaWWAN: {

    NSLog(@"4G/3G");

    break;

    }

    caseReachableViaWiFi: {

    NSLog(@"WiFi");

    break;

    }

    }

    }

    }

    - (void)dealloc

    {

    [_reachability stopNotifier];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];

    }

    当然实际开发中用的三方网络请求的要多点  我们以AFNetworking作为示例:

    //使用AFN框架来检测网络状态的改变

    -(void)AFNReachability

    {

    //1.创建网络监听管理者

    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

    //2.监听网络状态的改变

    /*

    AFNetworkReachabilityStatusUnknown     = 未知

    AFNetworkReachabilityStatusNotReachable   = 没有网络

    AFNetworkReachabilityStatusReachableViaWWAN = 3G

    AFNetworkReachabilityStatusReachableViaWiFi = WIFI

    */

    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    switch(status) {

    caseAFNetworkReachabilityStatusUnknown:

    NSLog(@"未知");

    break;

    caseAFNetworkReachabilityStatusNotReachable:

    NSLog(@"没有网络");

    break;

    caseAFNetworkReachabilityStatusReachableViaWWAN:

    NSLog(@"3G");

    break;

    caseAFNetworkReachabilityStatusReachableViaWiFi:

    NSLog(@"WIFI");

    break;

    default:

    break;

    }

    }];

    //3.开始监听

    [manager startMonitoring];

    }

    在这个里面我们就可以实现网络监听 在网络发生改变的时候 可以做出相应的操作~~~😀

    相关文章

      网友评论

        本文标题:ios如何实时监控网络改变

        本文链接:https://www.haomeiwen.com/subject/qiumvttx.html