最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的三種方法

 更新時(shí)間:2021年04月13日 11:47:25   作者:cr400af-2018  
這篇文章主要介紹了詳解IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的三種方法,網(wǎng)絡(luò)狀態(tài)是非常重要的知識(shí),感興趣的同學(xué),必須要看一下

在項(xiàng)目中,為了好的用戶體驗(yàn),有些場(chǎng)景必須線判斷網(wǎng)絡(luò)狀態(tài),然后才能決定該干嘛。比如視頻播放,需要線判斷是Wifi還是4G,Wifi直接播放,4G先提示用戶。獲取網(wǎng)絡(luò)狀態(tài)的方法大概有三種:

1. Reachability

這是蘋果的官方演示demo中使用到的方法,我們可以到蘋果官方文檔里下載Demo(點(diǎn)擊左上角Download Sample Code 即可下載),然后把Demo里的Reachability.h和.m考到自己項(xiàng)目中,并在Build Phases 的 Link Binary 添加SystemConfiguration.framework框架,然后在需要使用的地方導(dǎo)入Reachability頭文件

在 Reachability頭文件中我們可以看到無網(wǎng)絡(luò),wifi和蜂窩網(wǎng)三個(gè)網(wǎng)絡(luò)狀態(tài)的枚舉值,如下:

typedef enum : NSInteger {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN
} NetworkStatus;

(1)獲取網(wǎng)絡(luò)狀態(tài)

在iOS 7之前,當(dāng)用戶網(wǎng)絡(luò)為蜂窩網(wǎng)絡(luò)時(shí),是沒法判斷3G、4G等網(wǎng)絡(luò)類型的,iOS 7 后是可以判斷的

(NSString *)internetStatus {
    Reachability *reachability   = [Reachability reachabilityWithHostName:@"www.apple.com"];
    NetworkStatus internetStatus = [reachability currentReachabilityStatus];
    NSString *net = @"WIFI";
    switch (internetStatus) {
        case ReachableViaWiFi:
            net = @"WIFI";
            break;
        case ReachableViaWWAN:
            net = @"蜂窩數(shù)據(jù)";
            //net = [self getNetType ];   //判斷具體類型
            break;
        case NotReachable:
            net = @"當(dāng)前無網(wǎng)路連接";
        default:
            break;
    }
    return net;
}

(2)當(dāng)用戶為手機(jī)自帶網(wǎng)絡(luò)時(shí),判斷具體網(wǎng)絡(luò)類型

這時(shí)可以使用系統(tǒng)自帶的API來判斷是2G、3G還是4G,這就要使用到CTTelephonyNetworkInfo這類,記得在工程添加CoreTelephony.framework,并導(dǎo)入頭文件

- (NSString *)getNetType
{
    CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
    NSString *currentStatus = info.currentRadioAccessTechnology;
    if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyGPRS"]) {
        netconnType = @"GPRS";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyEdge"]) {
        netconnType = @"2.75G EDGE";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){
        netconnType = @"3G";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){
        netconnType = @"3.5G HSDPA";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){
        netconnType = @"3.5G HSUPA";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){
        netconnType = @"2G";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){
        netconnType = @"3G";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){
        netconnType = @"3G";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){
        netconnType = @"3G";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){
        netconnType = @"HRPD";
    }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyLTE"]){
        netconnType = @"4G";
    }
}

用此方法判斷的蜂窩網(wǎng)絡(luò)類型有如下類型:

CTRadioAccessTechnologyGPRS         //介于2G和3G之間,也叫2.5G ,過度技術(shù)

CTRadioAccessTechnologyEdge         //EDGE為GPRS到第三代移動(dòng)通信的過渡,EDGE俗稱2.75G

CTRadioAccessTechnologyWCDMA

CTRadioAccessTechnologyHSDPA            //亦稱為3.5G(3?G)

CTRadioAccessTechnologyHSUPA            //3G到4G的過度技術(shù)

CTRadioAccessTechnologyCDMA1x       //3G

CTRadioAccessTechnologyCDMAEVDORev0    //3G標(biāo)準(zhǔn)

CTRadioAccessTechnologyCDMAEVDORevA

CTRadioAccessTechnologyCDMAEVDORevB

CTRadioAccessTechnologyeHRPD        //電信使用的一種3G到4G的演進(jìn)技術(shù), 3.75G

CTRadioAccessTechnologyLTE          //接近4G

2. 通過系統(tǒng)statusBar判斷

這種方法在iPhone X 上可能引起奔潰,可能是蘋果修改了statusBar的keyPath,所以拿到的東西為nil,導(dǎo)致崩潰//獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)  (iPhone X 上可能引發(fā)崩潰)

+ (NSString *)networkingStatesFromStatebar {
    // 狀態(tài)欄是由當(dāng)前app控制的,首先獲取當(dāng)前app
    UIApplication *app = [UIApplication sharedApplication];
    //iphone X 會(huì)在這里崩潰
    NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
    int type = 0;
    for (id child in children) {
        if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
            type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
        }
    }
    NSString *stateString = @"wifi";
    switch (type) {
        case 0:
            stateString = @"notReachable";
             break;
        case 1:
            stateString = @"2G";
            break;
        case 2:
            stateString = @"3G";
            break;
        case 3:
            stateString = @"4G";
            break;
        case 4:
            stateString = @"LTE";
            break;
        case 5:
            stateString = @"wifi";
            break;
        default:
            break;
    }
    return stateString;
}

3. 通過AFNetworking

此方法可以寫在AppDelegate中,每當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí),就可以發(fā)通知,實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)變化,然后做相應(yīng)的處理

#pragma mark - ------------- 監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài) -------------
- (void)monitorNetworking
{
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case -1:
                NSLog(@"未知網(wǎng)絡(luò)");
                break;
            case 0:
                NSLog(@"網(wǎng)絡(luò)不可達(dá)");
                break;
            case 1:
                {
                NSLog(@"GPRS網(wǎng)絡(luò)");
                //發(fā)通知,帶頭搞事
                [[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"1" userInfo:nil];
                }
            break;
            case 2:
                {
                NSLog(@"wifi網(wǎng)絡(luò)");
                //發(fā)通知,搞事情
                [[NSNotificationCenter defaultCenter] postNotificationName:@"monitorNetworking" object:@"2" userInfo:nil];
                }
                break;
            default:
                break;
        }
        if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) {
            NSLog(@"有網(wǎng)");
        }else{
            NSLog(@"沒網(wǎng)");
        }
    }];
}

以上就是詳解IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的三種方法的詳細(xì)內(nèi)容,更多關(guān)于IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決ios微信頁面回退不刷新的問題

    解決ios微信頁面回退不刷新的問題

    下面小編就為大家?guī)硪黄鉀Qios微信頁面回退不刷新的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 兩種iOS調(diào)用系統(tǒng)發(fā)短信的方法

    兩種iOS調(diào)用系統(tǒng)發(fā)短信的方法

    iOS調(diào)用系統(tǒng)的發(fā)短信功能可以分為兩種:1,程序外調(diào)用系統(tǒng)發(fā)短信。2,程序內(nèi)調(diào)用系統(tǒng)發(fā)短信。第二種的好處是用戶發(fā)短信之后還可以回到app。這對(duì)app來說非常重要。
    2016-07-07
  • IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解

    IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解

    這篇文章主要介紹了IOS開發(fā)之字典轉(zhuǎn)字符串的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這樣的方法,需要的朋友可以參考下
    2017-10-10
  • IOS使用TestFlight測(cè)試的使用方法

    IOS使用TestFlight測(cè)試的使用方法

    TestFlight是iOS系統(tǒng)上用來測(cè)試軟件的,打開了這個(gè)APP就相當(dāng)于打開了新世界的大門,這個(gè)APP直接可以改變你對(duì)IOS系統(tǒng)封閉的看法,讓你擁有媲美安卓用戶的更多自主權(quán)!
    2022-12-12
  • 老生常談iOS應(yīng)用程序生命周期

    老生常談iOS應(yīng)用程序生命周期

    下面小編就為大家?guī)硪黄仙U刬OS應(yīng)用程序生命周期。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 淺談iphone X的簡(jiǎn)單適配問題(推薦)

    淺談iphone X的簡(jiǎn)單適配問題(推薦)

    這篇文章主要介紹了淺談iphone X的簡(jiǎn)單適配(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法

    iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法

    這篇文章主要為大家詳細(xì)介紹了iOS UIButton擴(kuò)大按鈕響應(yīng)區(qū)域的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 在iOS開發(fā)的Quartz2D使用中實(shí)現(xiàn)圖片剪切和截屏功能

    在iOS開發(fā)的Quartz2D使用中實(shí)現(xiàn)圖片剪切和截屏功能

    這篇文章主要介紹了在iOS開發(fā)的Quartz2D使用中實(shí)現(xiàn)圖片剪切和截屏功能的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • 移動(dòng)端頁面在ios中不顯示圖片的解決方法

    移動(dòng)端頁面在ios中不顯示圖片的解決方法

    下面小編就為大家?guī)硪黄苿?dòng)端頁面在ios中不顯示圖片的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • iOS WKWebView適配實(shí)戰(zhàn)篇

    iOS WKWebView適配實(shí)戰(zhàn)篇

    這篇文章主要介紹了iOS WKWebView適配實(shí)戰(zhàn)篇,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

民乐县| 常山县| 原平市| 沁源县| 庆元县| 大英县| 阿图什市| 宜阳县| 巫溪县| 麻栗坡县| 宝清县| 抚州市| 城口县| 鄯善县| 元朗区| 常山县| 沧州市| 长海县| 锦州市| 当雄县| 新安县| 乌海市| 阿鲁科尔沁旗| 东安县| 淮阳县| 蓝山县| 广饶县| 崇义县| 海门市| 铁岭县| 浦北县| 辽源市| 象州县| 盐山县| 郯城县| 朝阳市| 赤壁市| 松原市| 涟源市| 全椒县| 永川市|