使用之前请从Apple网站下载示例:点此下载
然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。
Reachability 中定义了3种网络状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 typedef enum { NotReachable = 0 , ReachableViaCarrierDataNetwork, ReachableViaWiFiNetwork } NetworkStatus; typedef enum { NotReachable = 0 , ReachableViaWiFi, ReachableViaWWAN } NetworkStatus;
比如检测某一特定站点的接续状况,可以使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”]; switch ([r currentReachabilityStatus]) { case NotReachable: break ; case ReachableViaWWAN: break ; case ReachableViaWiFi: break ; }
检测当前网络环境:
1 2 3 4 5 6 7 8 9 + (BOOL ) IsEnableWIFI { return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable); } + (BOOL ) IsEnable3G { return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable); }
连接状态实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。
Reachability 1.5
My.AppDelegate.h 1 2 3 4 5 6 7 8 9 #import "Reachability.h" @interface MyAppDelegate : NSObject <UIApplicationDelegate > { NetworkStatus remoteHostStatus; } @property NetworkStatus remoteHostStatus;@end
My.AppDelegate.m 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #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]; }
Reachability 2.0
MyAppDelegate.h 1 2 3 4 5 6 7 @class Reachability ;@interface MyAppDelegate : NSObject <UIApplicationDelegate > { Reachability *hostReach; } @end
MyAppDelegate.m 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 - (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]; }
来源:http://www.cnblogs.com/mrhgw/archive/2012/08/01/2617760.html