iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
2011-05-17 21:52
477 查看
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。
然后将 SystemConfiguration.framework 添加进工程:
Reachability 中定义了3种网络状态。
NotReachable
无连接
ReachableViaCarrierDataNetwork (ReachableViaWWAN)
使用3G/GPRS网络
ReachableViaWiFiNetwork (ReachableViaWiFi)
使用WiFi网络
比如检测某一特定站点的接续状况,可以使用下面的代码:
Reachability
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:然后将 SystemConfiguration.framework 添加进工程:
Reachability 中定义了3种网络状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // the network state of the device for Reachability 1.5. typedef enum { NotReachable = 0, ReachableViaCarrierDataNetwork, ReachableViaWiFiNetwork } NetworkStatus; // the network state of the device for Reachability 2.0. typedef enum { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN } NetworkStatus; |
无连接
ReachableViaCarrierDataNetwork (ReachableViaWWAN)
使用3G/GPRS网络
ReachableViaWiFiNetwork (ReachableViaWiFi)
使用WiFi网络
比如检测某一特定站点的接续状况,可以使用下面的代码:
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: // 使用3G网络 break; case ReachableViaWiFi: // 使用WiFi网络 break; } |
检测当前网络环境
程序启动时,如果想检测可用的网络环境,可以像这样。1 2 3 4 5 6 7 8 9 | // 是否wifi + (BOOL) IsEnableWIFI { return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable); } // 是否3G + (BOOL) IsEnable3G { return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable); } |
连接状态实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。Reachability 1.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 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]; } |
Reachability 2.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 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]; // ... } |
相关文章推荐
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
- iPhone开发技巧之网络篇--- 确认网络环境 3G/WIFI
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI(转)
- iPhone开发技巧之网络篇--- 确认网络环境 3G/WIFI
- iPhone开发—判断网络环境3G/WIFI
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发技巧之网络篇(4)--- 确认网络环境
- ios利用Reachability确认网络环境3G/WIFI
- IOS之确认网络环境(3G/WIFI)
- iphone开发3G,wifi网络的切换
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- ios 确认网络环境3G/WIFI,网络状态监测的总结
- iPhone开发 判断当前的网络是3g还是wifi
- 确认网络环境 3G/WIFI
- iPhone开发之确认网络环境
- iOS开发之WIFI,3G/4G两种网络同时使用技巧
- iPhone开发 判断当前的网络是3g还是wifi
- iOS开发测试不同的网络环境2G/3G/4G/WiFi