ty9919 发表于 2015-10-1 08:49:05

[转]确认网络环境3G/WIFI

1. 添加源文件和framework
   
    开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。
    Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:
   
    1.1. 添加源文件:
    在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:
   
   
    1.2.添加framework:
    将SystemConfiguration.framework 添加进工程。如下图:
   
   
    2. 网络状态
   
    Reachability.h中定义了三种网络状态:
    typedef enum {
      NotReachable = 0,            //无连接
      ReachableViaWiFi,            //使用3G/GPRS网络
      ReachableViaWWAN            //使用WiFi网络
    } NetworkStatus;
   
    因此可以这样检查网络状态:
    Reachability *r = ;
    switch () {
            case NotReachable:
                  // 没有网络连接
                  break;
            case ReachableViaWWAN:
                  // 使用3G网络
                  break;
            case ReachableViaWiFi:
                  // 使用WiFi网络
                  break;
    }
   
    3.检查当前网络环境
    程序启动时,如果想检测可用的网络环境,可以像这样
    // 是否wifi
    + (BOOL) IsEnableWIFI {
      return ([ currentReachabilityStatus] != NotReachable);
    }
    // 是否3G
    + (BOOL) IsEnable3G {
      return ([ currentReachabilityStatus] != NotReachable);
    }
    例子:
    - (void)viewWillAppear:(BOOL)animated {   
    if ((.currentReachabilityStatus == NotReachable) &&
            (.currentReachabilityStatus == NotReachable)) {
            self.navigationItem.hidesBackButton = YES;
            ;
      }
    }
    4. 链接状态的实时通知
    网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户:
   
    Reachability 1.5版本
    // 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 = [ remoteHostStatus];
    }
    // 通知网络状态
    - (void)reachabilityChanged:(NSNotification *)note {
      ;
      if (self.remoteHostStatus == NotReachable) {
            UIAlertView *alert = [ initWithTitle:NSLocalizedString(@"AppName", nil)
                         message:NSLocalizedString (@"NotReachable", nil)
                        delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
            ;
            ;
      }
    }
    // 程序启动器,启动网络监视
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
   
      // 设置网络检测的站点
      [ setHostName:@"www.apple.com"];
      [ setNetworkStatusNotificationsEnabled:YES];
      // 设置网络状态变化时的通知函数
      [ addObserver:self selector:@selector(reachabilityChanged:)
                                                 name:@"kNetworkReachabilityChangedNotification" object:nil];
      ;
    }
    - (void)dealloc {
      // 删除通知对象
      [ removeObserver:self];
      ;
      ;
    }
   
    Reachability 2.0版本
   
    // MyAppDelegate.h
    @class Reachability;
      @interface MyAppDelegate : NSObject <UIApplicationDelegate> {
            Reachability*hostReach;
      }
    @end
    // MyAppDelegate.m
    - (void)reachabilityChanged:(NSNotification *)note {
      Reachability* curReach = ;
      NSParameterAssert(]);
      NetworkStatus status = ;
   
      if (status == NotReachable) {
            UIAlertView *alert = [ initWithTitle:@"AppName""
                              message:@"NotReachable"
                              delegate:nil
                              cancelButtonTitle:@"YES" otherButtonTitles:nil];
                              ;
                              ;
      }
    }
                              
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
      // ...
                  
      // 监测网络情况
      [ addObserver:self
                              selector:@selector(reachabilityChanged:)
                              name: kReachabilityChangedNotification
                              object: nil];
      hostReach = [ retain];
      hostReach startNotifer];
      // ...
    }
页: [1]
查看完整版本: [转]确认网络环境3G/WIFI