ios利用Reachability确认网络环境3G/WIFI(转)

 确认网络环境 

开发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];
// ...}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值