当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS实时监控网络状态的改变

iOS实时监控网络状态的改变

2019年07月24日  | 移动技术网IT编程  | 我要评论

依黛兰,煤矿工人工作总结,北京到烟台火车时刻表

在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的:
 (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
 (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 
  wifi网络:自动下载高清图片 
  4g/3g网络:只下载缩略图 
  没有网络:只显示离线的缓存数据 

 常用的有以下两种方法: 
  (1)、使用苹果观法提供的检测ios设备网络环境用的库 reachablity 
  (2)、使用afn框架中的afnetworkreachabilitymanager来监听网络状态的改变 

一、苹果官方提供了一个叫reachability的示例程序,便于开发者检测网络状态 
使用之前请从apple网站下载示例:

然后将reachability.h 和 reachability.m 加到自己的项目中,并引用 systemconfiguration.framework,就可以使用了。
reachability 中定义了3种网络状态: 

typedef enum : nsinteger {

  notreachable = 0, //无连接
  reachableviawifi, //使用3g/gprs网络
  reachableviawwan //使用wifi网络

} 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:[reachability class]]);
  [self updateinterfacewithreachability:curreach];
}

- (void)updateinterfacewithreachability:(reachability *)reachability
{
  if (reachability == _reachability)
  {
    networkstatus netstatus = [reachability currentreachabilitystatus];
    switch (netstatus)
    {
      case notreachable:   {
        nslog(@"没有网络!");
        break;
      }
      case reachableviawwan: {
        nslog(@"4g/3g");
        break;
      }
      case reachableviawifi: {
        nslog(@"wifi");
        break;
      }
    }
  }
}


- (void)dealloc
{
   [_reachability stopnotifier];
  [[nsnotificationcenter defaultcenter] removeobserver:self name:kreachabilitychangednotification object:nil];
} 

二、使用afn框架中的afnetworkreachabilitymanager来监听网络状态的改变

//使用afn框架来检测网络状态的改变
-(void)afnreachability
{
  //1.创建网络监听管理者
  afnetworkreachabilitymanager *manager = [afnetworkreachabilitymanager sharedmanager];

  //2.监听网络状态的改变
  /*
   afnetworkreachabilitystatusunknown     = 未知
   afnetworkreachabilitystatusnotreachable   = 没有网络
   afnetworkreachabilitystatusreachableviawwan = 3g
   afnetworkreachabilitystatusreachableviawifi = wifi
   */
  [manager setreachabilitystatuschangeblock:^(afnetworkreachabilitystatus status) {
    switch (status) {
      case afnetworkreachabilitystatusunknown:
        nslog(@"未知");
        break;
      case afnetworkreachabilitystatusnotreachable:
        nslog(@"没有网络");
        break;
      case afnetworkreachabilitystatusreachableviawwan:
        nslog(@"3g");
        break;
      case afnetworkreachabilitystatusreachableviawifi:
        nslog(@"wifi");
        break;

      default:
        break;
    }
  }];

  //3.开始监听
  [manager startmonitoring];
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网