美文网首页
iOS监测网络状态

iOS监测网络状态

作者: 爱吃萝卜的小蘑菇 | 来源:发表于2017-06-30 13:45 被阅读193次

.#### - 可以利用AFNetworking实现监测手机网络状态的功能

  1. 创建监听管理者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
  1. 开始进行监控
[manager startMonitoring];
  1. 判断当前状态
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
                /*
                typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
                    AFNetworkReachabilityStatusUnknown          = -1, //未知
                    AFNetworkReachabilityStatusNotReachable     = 0,  //无连接
                    AFNetworkReachabilityStatusReachableViaWWAN = 1,  //3G
                    AFNetworkReachabilityStatusReachableViaWiFi = 2,  //WIFI
                };
                 */
            case AFNetworkReachabilityStatusUnknown:
            {
                NSLog(@"未知网络");
            }
                break;
            case AFNetworkReachabilityStatusNotReachable:
            {
                NSLog(@"无法联网");
            }
                break;
                
            case AFNetworkReachabilityStatusReachableViaWWAN:
            {
                NSLog(@"当前使用的是2g/3g/4g网络");
            }
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
            {
                NSLog(@"当前在WIFI网络下");
            }
                
        }
    }];

- 还可以利用苹果提供的Reachablity库进行实现

  • 苹果官方提供的Doc,下载地址: http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

  • Reachability类:这个类用于检测当前网络状态,是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。Reachability类不是SDK的一部分,可以在iOS Developer Library里找到这份代码。

  • 如何使用Reachability

  1. 从苹果网站上下载Reachability.zip文件,解压之。

  2. 重用Reachability类

    (1)把Reachability.h和Reachability.m文件拖到项目中。

    (2)添加框架:SystemConfiguration.framework。

因为Reachablity只能监听网络状态的状况,不能监听它的改变,所以采用通知的方式

  1. 首先添加引用
@property (nonatomic) Reachability *internetReachability;
  1. 然后在viewDidLoad中添加监听
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    
    //生成对象
    self.internetReachability = [Reachability reachabilityForInternetConnection];
    [self.internetReachability startNotifier];
    
    //由于kReachabilityChangedNotification监听只有在网络状态改变时才会生效,所以调用此方法,主动判断网络状态
    [self updateInterfaceWithReachability:self.internetReachability];
    
}

-(void)reachabilityChanged:(NSNotification *)note{
    
    Reachability *curReach = [note object];
    NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
    [self updateInterfaceWithReachability:curReach];
    
}

- (void)updateInterfaceWithReachability:(Reachability *)reachability{
    NetworkStatus netStatus = [reachability currentReachabilityStatus];
    switch (netStatus) {
        case NotReachable:
            NSLog(@"无网络");
            break;
        case ReachableViaWiFi:
            NSLog(@"WIFI");
            break;
        case ReachableViaWWAN:
            NSLog(@"手机网络");
            break;
        default:
            break;
    }
}
  1. 最后销毁监听
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}

但是第一次尝试的时候,没有添加引用,发现在页面加载时检测到网络状态,但是在网络状态改变是不会调用通知,要注意这样写是不行的

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    
    
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    [self updateInterfaceWithReachability:reach];
    
    [reach startNotifier];
    
}

相关文章

  • 判断设备是否真正的连接互联网

    在iOS中监测网络状态有好几种方式,详情点击这里。但是在一般的网络监测都只是能够监测本地的网络状态,而真实的网络可...

  • iOS监测网络状态

    .#### - 可以利用AFNetworking实现监测手机网络状态的功能 创建监听管理者 开始进行监控 判断当前...

  • iOS监测网络状态

    1.通过AFNetworking的AFNetworkReachabilityManager对象 监听网络方法 调用...

  • iOS 有关WIFI讯息获取

    iOS 有关WIFI讯息获取 流量监测 获取wifi地址 获取wifi名称 从手机状态栏获取当前网络状态

  • AFNetworking3.0网络状态监测<二>

    SystemConfiguration网络监测 网络状态监测使用SystemConfiguration这个API ...

  • iOS进阶之网络--网络状态监测

    Reachability简介 很多应用中都会涉及对用户手机所在网络环境(数据、WiFi、无网络)的监测,在不同的网...

  • iOS 实时监测网络状态

    最近公司需求APP在无网络下提示用户所以整理下自己写的代码,方便自己查阅以及给大家带来一点思路。

  • ios中网络状态的监测

    一:苹果官方提供的Reachability示例程序的监测 导入Reachability.h和Reachabilit...

  • iOS开发 监测网络状态

    一、说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一...

  • IOS开发笔记-监测网络状态

    两种方法监测网络状态: AFNetworking中AFNetworkReachabilityManager监测网络...

网友评论

      本文标题:iOS监测网络状态

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