iOS使用Reachability檢測2G、3G、4G網(wǎng)絡(luò)

我們常常會(huì)碰到這樣的需求,在2G網(wǎng)絡(luò)狀態(tài)下不下載高清圖片,只查看文字,在wifi、3G、4G可以下載高清圖片,以達(dá)到提升用戶體驗(yàn)的目的。最近在自己的項(xiàng)目里面也有類似的需求,查找資料,稍微修改了蘋果官方的Reachability實(shí)時(shí)監(jiān)測網(wǎng)絡(luò)狀態(tài)變化。

1、不廢話,直接上干貨

Reachability.m文件中導(dǎo)入CoreTelephony庫
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
找到此方法if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)修改,對了 ,先修改枚舉值在Reachability.h

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

增加代碼

if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
    {
        /*
         ... but WWAN connections are OK if the calling application is using the CFNetwork APIs.
         */
        returnValue = ReachableViaWWAN;
        if (IOS_VERSION >= 7.0) {
            CTTelephonyNetworkInfo *phonyNetwork = [[CTTelephonyNetworkInfo alloc] init];
            NSString *currentStr = phonyNetwork.currentRadioAccessTechnology;
            if (currentStr) {
                if ([currentStr isEqualToString:CTRadioAccessTechnologyLTE]) {
                    return kRaeachableVia4G;
                }else if ([currentStr isEqualToString:CTRadioAccessTechnologyGPRS]|| [currentStr isEqualToString:CTRadioAccessTechnologyEdge]){
                    return kReachableVia2G;
                }else{
                    return kReachableVia3G;
                }
            }
        }
        if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
            if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
                return kReachableVia2G;
            }
            return kReachableVia3G;
        }
        return ReachableViaWWAN;
    }

2、在需要的地方引入#import "Reachability.h"監(jiān)聽網(wǎng)絡(luò)狀態(tài)變化通知

- (void)viewDidLoad {
    [super viewDidLoad];
    // 監(jiān)測網(wǎng)絡(luò)情況
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];
    NSString *remoteHostName = @"www.apple.com";
    NSString *remoteHostLabelFormatString = NSLocalizedString(@"Remote Host: %@", @"Remote host label format string");
    UILabel *remoteHostLabel = [[UILabel alloc] init];
    remoteHostLabel.text = [NSString stringWithFormat:remoteHostLabelFormatString, remoteHostName];
    self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
    [self.hostReachability startNotifier];
}

3、記得在delloc里面銷毀通知

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

4、處理通知方法

- (void)reachabilityChanged:(NSNotification *)no{
    Reachability* curReach = [no object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];
    switch (status)
    {
            
        case NotReachable:
            NSLog(@"====當(dāng)前網(wǎng)絡(luò)狀態(tài)不可達(dá)=======");
            //其他處理
            self.kReachableVia = @"當(dāng)前網(wǎng)絡(luò)狀態(tài)不可達(dá)";
            break;
            
        case ReachableViaWiFi:
            NSLog(@"====當(dāng)前網(wǎng)絡(luò)狀態(tài)為Wifi=======");
            self.kReachableVia = @"ReachableViaWiFi";
            //其他處理
            break;
        case kReachableVia2G:
            NSLog(@"====當(dāng)前網(wǎng)絡(luò)狀態(tài)為2G=======");
            self.kReachableVia = @"kReachableVia2G";
            break;
        case kReachableVia3G:
            NSLog(@"====當(dāng)前網(wǎng)絡(luò)狀態(tài)為3G=======");
            //其他處理
            self.kReachableVia = @"kReachableVia3G";
            break;
        case kRaeachableVia4G:
            NSLog(@"====當(dāng)前網(wǎng)絡(luò)狀態(tài)為4G=======");
            self.kReachableVia = @"kRaeachableVia4G";
            //其他處理
            break;
        default:
            NSLog(@"你是外星來的嗎?");
            //其他處理
            self.kReachableVia = @"你是外星來的嗎?";
            break;
    }
}

結(jié)束語:網(wǎng)絡(luò)監(jiān)聽狀態(tài)就到這里了,還是挺簡單的,make一下,也希望能幫助到需要的人。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容