iOS检测网络连接状态

请从Apple网站下载示例:点此下载
然后将Reachability.hReachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。

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

<span style="font-size:14px;">// the network state of the device for Reachability 1.5.
typedef enum { 
    NotReachable = 0, //无连接  
    ReachableViaCarrierDataNetwork, //使用3G/GPRS网络
    ReachableViaWiFiNetwork //使用WiFi网络 
} NetworkStatus; 

// the network state of the device for Reachability 2.0.
typedef enum { NotReachable = 0, //无连接 
    ReachableViaWiFi, //使用3G/GPRS网络 
    ReachableViaWWAN //使用WiFi网络 
} NetworkStatus;</span>

比如检测某一特定站点的接续状况,可以使用下面的代码:
<span style="font-size:14px;">Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) { 
    case NotReachable: // 没有网络连接
    break;
    case ReachableViaWWAN: // 使用3G网络 
    break;
    case ReachableViaWiFi: // 使用WiFi网络 
    break;
}</span>

检测当前网络环境:
<span style="font-size:14px;">// 是否wifi 
+ (BOOL) IsEnableWIFI { 
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable); 
}

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

连接状态实时通知

网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。

Reachability 1.5
<span style="font-size:14px;">// My.AppDelegate.h 
#import "Reachability.h" 
@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 
	NetworkStatus remoteHostStatus;
}

@property NetworkStatus remoteHostStatus; 
@end 

// My.AppDelegate.m 
#import "MyAppDelegate.h" 
@implementation MyAppDelegate 
@synthesize remoteHostStatus; 

// 更新网络状态
- (void)updateStatus { 
	self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus]; 
} 


// 通知网络状态 
- (void)reachabilityChanged:(NSNotification *)note { 
	[self updateStatus]; 
    if (self.remoteHostStatus == NotReachable) { 
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil) delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
		[alert show]; 
		[alert release]; 
	} 
} 

// 程序启动器,启动网络监视

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
	// 设置网络检测的站点 
	[[Reachability sharedReachability] setHostName:@"www.apple.com"]; 
	[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES]; 
	// 设置网络状态变化时的通知函数 
	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification" object:nil]; 
	[self updateStatus]; 
} 

- (void)dealloc { 
	// 删除通知对象 
	[[NSNotificationCenter defaultCenter] removeObserver:self]; 
	[window release]; 
	[super dealloc];
}</span>

Reachability 2.0
<span style="font-size:14px;">// MyAppDelegate.h
@class Reachability;
@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 
    Reachability *hostReach;
} 
@end 

// MyAppDelegate.m 
- (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:@"AppName" message:@"NotReachable" delegate:nil cancelButtonTitle:@"YES" otherButtonTitles:nil]; 
	    [alert show]; 
	    [alert release]; 
    } 
} 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    // ... 
    // 监测网络情况 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; 
    hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
    [hostReach startNotifer];
    // ... 
}</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值