国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

使用Reachability類判斷iOS設備的當前網絡連接類型

2019-10-21 18:56:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了使用Reachability類判斷iOS設備的當前網絡連接類型,這里開發語言為傳統的Objectice-C,需要的朋友可以參考下
 


(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 = @"沒有網絡鏈接";
    }
}

 



注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和田县| 惠东县| 来安县| 长治市| 宝应县| 栾川县| 富锦市| 甘泉县| 天津市| 伊金霍洛旗| 察雅县| 中阳县| 南开区| 久治县| 那曲县| 深泽县| 富蕴县| 壤塘县| 陈巴尔虎旗| 开阳县| 武穴市| 读书| 安徽省| 泊头市| 湘阴县| 沾益县| 阳新县| 横山县| 运城市| 杭锦后旗| 武汉市| 山丹县| 沈丘县| 南雄市| 达州市| 阿鲁科尔沁旗| 嵩明县| 平武县| 紫云| 陵水| 沈丘县|