Reachability使用简介

如果app中需要从网络获取数据,必要地一步就是确认网络环境,我们可以通过apple提供的Reachability来确认。

首先,将Reachability.h和Reachability.m这两个文件拷到工程中,然后导入SystemConfiguration.framework这个framework,接下来我们就可以使用了.我用的版本是2.2。相对于2.0精简了一些接口。

这个类提供了三种网络环境。

分别是

typedef enum {
	NotReachable = 0,
	ReachableViaWiFi,
	ReachableViaWWAN
} NetworkStatus;

检测网络环境有主动探测和被动获取两种方式。

先介绍第一种,主动探测。

//reachabilityWithHostName- Use to check the reachability of a particular host name. 
+ (Reachability*) reachabilityWithHostName: (NSString*) hostName;

//reachabilityWithAddress- Use to check the reachability of a particular IP address. 
+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;

这两个接口需要提供hostName或者hostAddress,比如说

    Reachability *reachability = [Reachability reachabilityWithHostName:@“www.apple.com”];
    switch ([reachability currentReachabilityStatus]) {
            case NotReachable:
                    // 没有网络连接
                    break;
            case ReachableViaWWAN:
                    // 使用3G网络
                    break;
            case ReachableViaWiFi:
                    // 使用WiFi网络
                    break;
    }
当然,个人觉得不推荐这种方式,万一你提供的这个地址宕机了呢,所以还是用下面这个接口

// Use to check whether the default route is available.  
// Should be used to, at minimum, establish network connectivity.
+ (Reachability *) reachabilityForInternetConnection;
这个还是比较靠谱的。

另外还有一个检测是否是wifi网络的接口:

//reachabilityForLocalWiFi- checks whether a local wifi connection is available.
+ (Reachability*) reachabilityForLocalWiFi;


然后是第二种,通过notification来获取网络状态,也就是实时获取。

在程序启动时,加上下面:

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    _internetReachable = [Reachability reachabilityForInternetConnection];
    [_internetReachable startNotifier];

然后实现

- (void)checkNetworkStatus:(NSNotification *)notice
{
    NetworkStatus internetStatus = [_internetReachable currentReachabilityStatus];
    if (internetStatus == NotReachable) {
        [self negativeWindow];
    }
}

在这个方法里也可以使用参数来做:

    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];

OK, Done.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值