• 监听网络状态


    一、说明

    在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:

    (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)

    (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验

      WIFI3G网络:自动下载高清图片

      低速网络:只下载缩略图

      没有网络:只显示离线的缓存数据

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

    https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

    二、监测网络状态

    Reachability的使用步骤

    添加框架SystemConfiguration.framework

     

    添加源代码

     

    包含头文件

    #import "Reachability.h"

    在AppDelegate.m中添加如下代码:

    @property (nonatomic, strong) Reachability *conn;

     

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        //监听网络改变

        [self observerNetWorkChange];    

        return YES;

    }

    - (void)observerNetWorkChange{

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];

        self.conn = [Reachability reachabilityForInternetConnection];

        [self.conn startNotifier];

    }

    - (void)dealloc{

        [self.conn stopNotifier];

        [[NSNotificationCenter defaultCenter] removeObserver:self];

    }

     - (void)networkStateChange

     {

         [self checkNetworkState];

     }

     - (void)checkNetworkState

     {

         // 1.检测wifi状态

         Reachability *wifi = [Reachability reachabilityForLocalWiFi];

         // 2.检测手机是否能上网络(WIFI3G2.5G)

         Reachability *conn = [Reachability reachabilityForInternetConnection];

         // 3.判断网络状态

         if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi

             NSLog(@"有wifi");

         } else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网

                NSLog(@"使用手机自带网络进行上网");

         } else { // 没有网络

                NSLog(@"没有网络");

         }

    }

    注:

    一、监测网络状态(AFN里面已经封装)

        AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
        [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            // 当网络状态发生改变的时候调用这个block
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"WIFI");
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"自带网络");
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"没有网络");
                    break;
                    
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"未知网络");
                    break;
                default:
                    break;
            }
        }];
        // 开始监控
        [mgr startMonitoring];
    }
    
    - (void)dealloc
    {
        [[AFNetworkReachabilityManager sharedManager] stopMonitoring];
    }
    

    二、获取当前网络状态

    [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus 

    三、写一个基类继承UIViewController 

    基类里面写一个第一层添加 statusView (自定义一个没有网的情况下显示的view 优化) 提供接口

    1、- (void) show; (除了statusView.hidden = No 控制器view 其他view hidden = Yes)

    2、-(void) remove; (除了statusView.hidden = Yes 控制器view 其他view hidden = No)

    3、-(void)updateImage:(UIImage *)img andText:(NSString *)text andButtonText:(NSString *)buttonText andButtonType:(MCStateViewButtonType)type  

    statusView 不同的类型:1.当前无网时 2.请求无数据3.网络请求失败4.等等可自己定义

  • 相关阅读:
    CFgym102394I
    Infinite Fraction Path (后缀数组)
    2016ACM/ICPC亚洲区沈阳站-重现赛
    2sat学习笔记
    bzoj4176
    bzoj3309
    6C
    3U
    3T
    3R
  • 原文地址:https://www.cnblogs.com/junhuawang/p/5436274.html
Copyright © 2020-2023  润新知