ios利用Reachability确认网络环境3G/WIFI
来源:互联网 发布:网络证券公司 编辑:程序博客网 时间:2024/05/09 12:48
iPhone开发技巧之网络篇(4)--- 确认网络环境
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的。
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:
然后将 SystemConfiguration.framework 添加进工程:
Reachability 中定义了3种网络状态。
// 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.
typedefenum{
NotReachable= 0,
ReachableViaWiFi,
ReachableViaWWAN
} NetworkStatus;
NotReachable
无连接
ReachableViaCarrierDataNetwork (ReachableViaWWAN)
使用3G/GPRS网络
ReachableViaWiFiNetwork (ReachableViaWiFi)
使用WiFi网络
比如检测某一特定站点的接续状况,可以使用下面的代码:
Reachability*r= [ReachabilityreachabilityWithHostName:@“www.apple.com”];
switch([r currentReachabilityStatus])
{ caseNotReachable:
// 没有网络连接
break;
caseReachableViaWWAN:
// 使用3G网络break; caseReachableViaWiFi: // 使用WiFi网络break;}
检测当前网络环境
程序启动时,如果想检测可用的网络环境,可以像这样。
// 是否wifi
+ (BOOL) IsEnableWIFI{
return([[ReachabilityreachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL) IsEnable3G{
return([[ReachabilityreachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
连接状态实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。
Reachability 1.5
My.AppDelegate.h
#import"Reachability.h"
@interfaceMyAppDelegate: NSObject<UIApplicationDelegate> {
NetworkStatusremoteHostStatus;
}
@property NetworkStatusremoteHostStatus;
@end
// My.AppDelegate.m
#import"MyAppDelegate.h"
@implementationMyAppDelegate
@synthesizeremoteHostStatus;
// 更新网络状态
- (void)updateStatus{
self.remoteHostStatus = [[ReachabilitysharedReachability] remoteHostStatus];
}
// 通知网络状态
- (void)reachabilityChanged:(NSNotification*)note{
[selfupdateStatus];
if(self.remoteHostStatus == NotReachable)
{
UIAlertView*alert= [[UIAlertViewalloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil) delegate:nilcancelButtonTitle:@"OK"otherButtonTitles: nil];
[alert show];
[alert release];
}
}
// 程序启动器,启动网络监视
- (void)applicationDidFinishLaunching:(UIApplication*)application{
// 设置网络检测的站点
[[ReachabilitysharedReachability] setHostName:@"www.apple.com"];
[[ReachabilitysharedReachability] setNetworkStatusNotificationsEnabled:YES];
// 设置网络状态变化时的通知函数[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification"object:nil]; [selfupdateStatus];}
- (void)dealloc{
// 删除通知对象
[[NSNotificationCenterdefaultCenter] removeObserver:self];
[window release];
[superdealloc];
}
Reachability 2.0
/ MyAppDelegate.h
@classReachability;
@interfaceMyAppDelegate: NSObject<UIApplicationDelegate>
{ Reachability*hostReach;}
@end
// MyAppDelegate.m
- (void)reachabilityChanged:(NSNotification*)note{
Reachability* curReach= [note object];
NSParameterAssert([curReach isKindOfClass: [Reachabilityclass]]);
NetworkStatusstatus= [curReach currentReachabilityStatus];
if(status == NotReachable) {
UIAlertView*alert= [[UIAlertViewalloc] 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];
// ...}
- ios利用Reachability确认网络环境3G/WIFI
- ios利用Reachability确认网络环境3G/WIFI
- ios利用Reachability确认网络环境3G/WIFI
- ios利用Reachability确认网络环境3G/WIFI
- ios利用Reachability确认网络环境3G/WIFI
- ios利用Reachability确认网络环境3G/WIFI(转)
- 确认网络环境3G/WIFI Reachability的使用
- IOS之确认网络环境(3G/WIFI)
- 确认网络环境 3G/WIFI
- 确认网络环境3G/WIFI
- 确认网络环境 3G/WIFI
- ios 确认网络环境3G/WIFI,网络状态监测的总结
- ios 确认网络环境3G/WIFI,网络状态监测的总结
- iOS获取设备网络状态,2G,3G,4G,wifi,非Reachability
- iOS获取网络状态,区分2G、3G、4G、WIFI,非reachability
- iOS开发-Reachability实时检测Wifi,2G/3G/4G/网络状态
- Reachability.h 开源类的使用:判断网络环境,连接情况(无网络连接,3G,WIFI,GPRS)
- iPhone开发技巧之网络篇(4)--- 确认网络环境 3G/WIFI
- ListView常用用法2(分类总结)
- ORCAL WMSYS.WM_CONCAT 函数应用实例及Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]问题出现解决
- numpy中view详解
- 贪心——NYOJ 题目14 会场安排问题
- linux下查看所有硬盘分区+挂接NTFS磁盘/硬盘+自动挂接硬盘方法
- ios利用Reachability确认网络环境3G/WIFI
- 小众音乐电台推荐
- 面试题25:数组中出现次数超过一半的数字
- Windows Socket编程
- 学习笔记--计算机中的数学
- Ubuntu12.04下安装GCC方法及问题解决
- 非常详细的/etc/passwd解释
- 发布前的准备
- Guava学习之Preconditions