国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 启东市| 永定县| 洪湖市| 兴文县| 轮台县| 滕州市| 灵寿县| 孝昌县| 遂昌县| 永州市| 西林县| 合作市| 平定县| 抚顺市| 萍乡市| 庐江县| 清流县| 平顺县| 琼海市| 浑源县| 浦城县| 晋城| 英德市| 承德县| 文昌市| 华池县| 新余市| 淮南市| 弋阳县| 晋江市| 诏安县| 罗山县| 郴州市| 夹江县| 汶川县| 宣化县| 安丘市| 花莲县| 武宁县| 嘉兴市| 忻城县|