使用Reachability类判断iOS设备的当前网络连接类型_IOS

(1). 下载 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

(2). 拖reachability.h,reachability.m入工程 (库非ARC)

ARC:-fno-objc-arc              

(3) .导入SystemConfiguration.framework

(4).用法

复制代码 代码如下:

-(NSString*)getNetType
 
{
    
    NSString* result;
    
    Reachability *r = [Reachability reachabilityWithHostName:@"www.baidu.com"];
    NSLog(@"  ====:%i",[r currentReachabilityStatus]);
    switch ([r currentReachabilityStatus]) {
            
        case NotReachable:// 没有网络连接
            
            
            result=@"没有网络连接";
            
            break;
            
        case ReachableViaWWAN:// 使用3G网络
            
            result=@"3g";
            
            break;
            
        case ReachableViaWiFi:// 使用WiFi网络
            
            result=@"wifi";
            
            break;
            
    }
    NSLog(@"caseReachableViaWWAN=%i",ReachableViaWWAN);
    NSLog(@"caseReachableViaWiFi=%i",ReachableViaWiFi);
    return result;
    
}

(5)如果无法区分出2G、2.5G、3G网络的区别,那么我们可以将Reachability.m中的networkStatusForFlags方法重构:

复制代码 代码如下:

- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
{
    if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
    {
        return NotReachable;
    }
    
    BOOL retVal = NotReachable;
    
    if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
    {
        // if target host is reachable and no connection is required
        //  then we'll assume (for now) that your on Wi-Fi
        retVal = ReachableViaWiFi;
    }
    
    
    if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
         (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
    {
        // ... and the connection is on-demand (or on-traffic) if the
        //     calling application is using the CFSocketStream or higher APIs
        if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
        {
            // ... and no [user] intervention is needed
            retVal = ReachableViaWiFi;
        }
    }
    
    if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
    {
        if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {
            if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
                retVal = ReachableVia3G;
                if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
                    retVal = ReachableVia2G;
                }
            }
        }
    }
    return retVal;
}
 
//检查当前网络连接是否正常
-(BOOL)connectedToNetWork
{
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
    
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
    
    if (!didRetrieveFlags) {
        printf("Error. Count not recover network reachability flags\n");
        return NO;
    }
    
    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    return (isReachable && !needsConnection) ? YES : NO;
}
 
//检查网络连接类型
-(void)checkNetworktype:(id)sender{
    NSString *connectionKind;
    if ([self connectedToNetWork]) {
        hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];
        switch ([hostReach currentReachabilityStatus]) {
            case NotReachable:
                connectionKind = @"没有网络链接";
                break;
            case ReachableViaWiFi:
                connectionKind = @"当前使用的网络类型是WIFI";
                break;
            case ReachableVia3G:
                connectionKind = @"当前使用的网络链接类型是WWAN(3G)";
                break;
            case ReachableVia2G:
                connectionKind = @"当前使用的网络链接类型是WWAN(2G)";
                break;   
            default:
                break;
        }
    }else {
        connectionKind = @"没有网络链接";
    }
}

时间: 2024-09-18 10:41:50

使用Reachability类判断iOS设备的当前网络连接类型_IOS的相关文章

ios-怎么判断IOS设备的版本

问题描述 怎么判断IOS设备的版本 有两个storyboard分别制定给iPhone5和iPhone4的尺寸.如何让代码检测ios版本? - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1 UIStoryboard * mainStoryboard = nil ; if ( SYSTEM_VERSION_GREATER

iOS下的实际网络连接状态检测:RealReachability

序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立: 2.

判断是否联网_检测网络的类型为3G、2G、wap、wifi

判断是否联网_检测网络的类型为3G.2G.wap.wifi  判断是否联网: /*** * judge Internet is available * * @author wei-spring * @return */ public boolean isHasNet() { ConnectivityManager cwjManager = (ConnectivityManager) mActivity .getSystemService(Context.CONNECTIVITY_SERVICE)

如何在iphon IOS设备上使用二维码_IOS

下面给大家介绍下二维码简介 二维码 (2-dimensional bar code) 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理: 二维条码/二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息. 下面介绍下如

iOS下的实际网络连接状态检测

序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立: 2.

开源中国iOS客户端学习 (六) 网络连接检测

开源中国iOS客户端基于网络同步数据,从而达到与网页看到同样数据效果,所以在启动程序的时候需要检查网络:这也是每一个联网应用启动的第一步,如果联网应用没有检查网络,苹果公司将不予以审核通过: 开源中国iOS客户端大牛们在写网络检测时很迷惑人,开始以为他们用的是ASI类库做的网络检测,今天才看明白,他们并不是用的ASI类库检测,而是用到AFNetworking这个类库里一个实例方法做网络连接检测: 先看Appdelegate文件: 在application:didFinishLaunchingWi

使用Mac给身边的移动设备共享Wi-Fi网络连接

  假如你身边有一台Mac的话就不用为这个劳神了,下面小编手把手教大家如何使用Mac的OS X给各位的移动设备共享无线网络. 首先,链接网线,进入设置. 选择共享 在互联网共享这一栏选择要共享的网络,以太网或者PPPoE链接 之后在下面选择通过Wi-Fi共享. 点击Wi-Fi选项设定共享密码 都完成后在左边互联网共享前面的选择框内打钩,启用共享. 之后就可以使用移动设备搜寻你的Mac并上网冲浪啦.

IOS代码笔记之网络嗅探功能_IOS

本文实例为大家分享了IOS网络嗅探工具,供大家参考,具体内容如下 一.效果图    二.工程图   三.代码AppDelegate.h #import <UIKit/UIKit.h> #import "Reachability.h" @interface AppDelegate : UIResponder <UIApplicationDelegate> { Reachability *reachability; BOOL WarningViaWWAN; } @p

报告称广东北京上海五省市iOS设备占全国一半

新浪科技讯 10月14日上午消息,来自创新工场旗下友盟的数据报告显示,新版iOS通常会在一个月后成为国内市场主流.报告称广东.北京.上海.浙江.江苏五省市的iOS设备占全国一半份额,而iPhone和iPad在使用时间上存在明显互补. 这份报告的数据样本来源于友盟移动数据统计分析平台的3000多款面向国内市场开发的iOS应用:覆盖了1500万部国内iOS设备:数据的时间跨度为2011.01-2011.07. 以下是这份报告的主要内容: •关于设备类型的发展,截止到2011年7月份,iPhone4的