iOS网络检测

使用之前请从Apple网站下载示例:点此下载

技术分享

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

typedef enum : NSInteger {
    NotReachable = 0,//无网络
    ReachableViaWiFi,//wifi
    ReachableViaWWAN//3g
} NetworkStatus;

比如检测某一特定站点的接续状况,可以使用下面的代码:

    Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
    switch ([r currentReachabilityStatus]) {
        case NotReachable:
            // 没有网络连接
            NSLog(@"没有网络连接");
            break;
        case ReachableViaWWAN:
            NSLog(@"使用3g网络");
            // 使用3G网络
            break;
        case ReachableViaWiFi:
            NSLog(@"使用wifi网络");
            // 使用WiFi网络
            break;
    }

检测当前网络环境:

// 是否wifi
+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

// 是否3G
+ (BOOL) IsEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

连接状态实时通知:

#import <UIKit/UIKit.h>
#import "Reachability.h"
@interface AppDelegate : UIResponder  <UIApplicationDelegate> {
    Reachability  *hostReach;
}
@property (strong, nonatomic) UIWindow *window;


@end
- (void)reachabilityChanged:(NSNotification *)note {
    // 连接改变
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    //处理连接改变后的情况
    NetworkStatus status = [curReach currentReachabilityStatus];
    
    if (status == NotReachable) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                        message:@"你的网络已断开连接"
                                                       delegate:nil
                                              cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [alert show];
    }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 监测网络情况
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];
    hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];//可以以多种形式初始化
    [hostReach startNotifier];//开始监听,会启动一个run loop
    return YES;
}

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。