iPhone开发技巧---确认网络环境3G/WIFI

标签: iphone 开发 技巧 | 发表时间:2012-03-24 18:35 | 作者:zyc851224
出处:http://blog.csdn.net
确认网络环境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 = [Reachability reachabilityWithHostName:@“www.apple.com”];
    switch ([r currentReachabilityStatus]) {
            case NotReachable:
                    // 没有网络连接
                    break;
            case ReachableViaWWAN:
                    // 使用3G网络
                    break;
            case ReachableViaWiFi:
                    // 使用WiFi网络
                    break;
    }
    3.检查当前网络环境
    程序启动时,如果想检测可用的网络环境,可以像这样
    // 是否wifi
    + (BOOL) IsEnableWIFI {
        return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
    }
    // 是否3G
    + (BOOL) IsEnable3G {
        return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
    }
    例子:
    - (void)viewWillAppear:(BOOL)animated {   
    if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&
            ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {
            self.navigationItem.hidesBackButton = YES;
            [self.navigationItem setLeftBarButtonItem:nil animated:NO];
        }
    }
    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 = [[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版本
    // 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];
        // ...
    }


作者:zyc851224 发表于2012-3-24 18:35:20 原文链接
阅读:25 评论:0 查看评论

相关 [iphone 开发 技巧] 推荐:

iphone开发小技巧汇总(1)

- - CSDN博客推荐文章
1.iphone之xx_Prefix.pch的作用和用法.     Prefix.pch:扩展名.pch表示"pre-compiled-header",这是一个你工程要用到的 来自于外部框架的头文件列表. xcode将编译这些头到文件,这将减少你在选择Build或Build and Go时编译项目的时间.

iPhone开发技巧---确认网络环境3G/WIFI

- - CSDN博客推荐文章
确认网络环境3G/WIFI. 添加源文件和framework. 开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息. 如果没有处理它们,是不会通过Apple的审(我们的)查的. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法. 要在应用程序程序中使用Reachability,首先要完成如下两部:.

为iPhone App切图的技巧

- armgod - Kevin Cao&#39;s Blog
为了支持iPhone 4的视网膜屏,我们开发App时要准备两套大小的图片资源. 一般情况下,设计师就只做好高分辨率的Layout,我们在切图的时候多存一个缩小的版本. 切图的工作本来就繁琐,现在居然还增加了一倍工作量,实在难以忍受. 所以今天我们就来探讨一下利用工具提高效率的做法. 说明:有一些图片不能直接缩小,为了追求UI设计像素级精确的美感,设计师应该做好两套Layout.

iPhone 4S 耳機的使用技巧 - 2013

- - Tsung's Blog
最近耳機有一邊都沒有聲音, 於是來把 iPhone 4S 的耳機拿出來用用看, 沒想到功能還真不少.. iPhone 使用手冊 - iPhone_iOS4_User_Guide_TA.pdf (第 44 頁). iPhone 耳機可以控制聽音樂、電話外, 還可以控制拍照、Siri~ 而且耳機也有內建麥克風(我一直以為就是純耳機.

你可能不知道的 iPhone 技巧

- - 望月的博客
入了 iPhone 5C 之后,Google 了一番 iPhone 的相关技巧,发现许多奇技淫巧,才发现原以为很懂 iPhone 的我原来还是很无知,在这里将一些觉得有用的整理出来给大家,你知道几条呢. 不过,切记不要让你的那个 TA 看到最后一条. iPhone 本身的强应用. 这其实是一个广为流传的段子,放在前面开开胃吧.

iPhone使用小技巧:揪出吃掉 iPhone容量的怪獸

- - ApplePlan
許多朋友在購買 iPhone時除了選擇黑色或白色外,最讓人頭痛的就是選擇一支適合自己容量的 iPhone. 但往往人算不如天算,即使買了 64G最大版本的 iPhone卻發現因為塞了許多照片、遊戲、影片、app等讓你想要錄下跨年璀璨煙火時才發現容量不夠使用. 今天 ApplePlan要教你如何監看手機中容量的使用狀況.

iPhone开发资源汇总

- 圣斌 - Starming星光社最新更新
这里总结了iPhone开发者开发过程中可能需要的一些资源. 如何用Facebook graphic api上传视频:. Keychain保存数据封装:. 自定义圆角Switch按件:. 弹出窗口For iphone and ipad:. 可伸缩的toolBar实例:. cocos2d中也可用UIScrollView,UITableView,UIGestureRecognizers.

做一名iPhone自由开发人员

- Kanny - cnBeta.COM
四个月前,我辞掉工作,成为了一名全职的自由职业开发人员. 我创建了自己的网站,注册了公司业务,并开始寻找客户. 我想找的是现在比较感兴趣的iPhone和iPad应用的开发工作. 要找到与iOS相关的开发工作并不难,因为现行市场对手机开发人员的需求量非常大. (注:Freelancer最近的一个调查报告就是证明.

iPhone和iPad Web开发上手指南

- - 互联网的那点事
感谢上天,iPhone操作系统上的Safari浏览器幸好是一款优秀的浏览器. 跟桌面版的Safari 4一样,它对CSS3及HTML5有良好的支持. 另外它也提供若干一流的界面元素供即用,不过这些界面元素在iPhone和iPad之间有时还存在差别. 另外,由于iPhone操作系统面世已经很长一段时间了,网络上有很多资源可供利用.