我們在開發(fā)APP時,涉及網(wǎng)絡(luò)連接的時候蛮穿,都會想著提前判斷一下當(dāng)前的網(wǎng)絡(luò)連接狀態(tài)庶骄,如果沒有網(wǎng)絡(luò),就不再請求url践磅,省去不必要的步驟单刁,所以,這個如何判斷?
記得在工程添加:SystemConfiguration.framework
去蘋果API里搜索Reachability羔飞,下載Demo(點擊左上角Download Sample Code 即可下載)肺樟,把demo里的Reachability.h和Reachability.m拖到自己的工程里。也可以在百度里面搜索”Reachability”逻淌,然后下載么伯,不一定非要到蘋果官網(wǎng)去下載。
但是使用Reachability有一個問題卡儒,就是它只能判斷當(dāng)前是Wifi或者手機(jī)自帶網(wǎng)絡(luò)田柔,沒有辦法詳細(xì)得判斷2G、3G骨望、4G硬爆。
如果確定為手機(jī)自帶網(wǎng)絡(luò),這時可以使用系統(tǒng)自帶的API來判斷是2G擎鸠、3G還是4G缀磕,這就要使用到CTTelephonyNetworkInfo這類,記得在工程添加CoreTelephony.framework
1.引入頭文件
//網(wǎng)絡(luò)
#import "Reachability.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
2.代碼:
- (NSString *)getNetconnType{
NSString *netconnType = @"";
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([reach currentReachabilityStatus]) {
case NotReachable:// 沒有網(wǎng)絡(luò)
{
netconnType = @"no network";
}
break;
case ReachableViaWiFi:// Wifi
{
netconnType = @"Wifi";
}
break;
case ReachableViaWWAN:// 手機(jī)自帶網(wǎng)絡(luò)
{
// 獲取手機(jī)網(wǎng)絡(luò)類型
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";
}
}
break;
default:
break;
}
return netconnType;
}