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


    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]; 
    // ...}
    
    花开花谢春不管,水暖水寒鱼自知.
  • 相关阅读:
    CSU 1122
    CSU 1256
    CSU 1240
    HDU 1874
    CSU 1004
    Problem F CodeForces 16E
    Problem E CodeForces 237C
    Problem C FZU 1901
    12-30
    2016-12-29
  • 原文地址:https://www.cnblogs.com/taintain1984/p/3208704.html
Copyright © 2020-2023  润新知