Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用
Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。
Reachability 中定义了3种网络状态:
- NotReachable
无连接
- ReachableViaCarrierDataNetwork (ReachableViaWWAN)
使用3G/GPRS网络
- ReachableViaWiFiNetwork (ReachableViaWiFi)
使用WiFi网络
检测莫个特定站点的连接状况
- Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
- switch ([r currentReachabilityStatus])
- {
- case NotReachable:
-
- break;
- case ReachableViaWWAN:
-
- break;
- case ReachableViaWiFi:
-
- break;
- }
检测当前网络环境
-
- + (BOOL) IsEnableWIFI
- {
- return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
- }
-
-
- + (BOOL) IsEnable3G
- {
- return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
- }
连接状态实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。
Reachability 1.5
-
-
- #import "Reachability.h"
-
- @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
- NetworkStatus remoteHostStatus;
- }
-
- @property NetworkStatus remoteHostStatus;
-
- @end
-
-
-
- #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
-
-
- @class Reachability;
-
- @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
- Reachability *hostReach;
- }
-
- @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:@"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];
-
- }