欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-13 08:13:46
在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的:  (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)  (2)...

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

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

一、苹果官方提供了一个叫reachability的示例程序,便于开发者检测网络状态 
使用之前请从apple网站下载示例:http://xiazai.jb51.net/201608/yuanma/reachability(jb51.net).rar

然后将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];
}

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

上一篇:

下一篇: