方法一:利用系統(tǒng)狀態(tài)欄判斷網絡狀態(tài)
// 狀態(tài)欄是由當前app控制的睛廊,首先獲取當前app
UIApplication *app = [UIApplication sharedApplication];
NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
int type = 0;
for (id child in children) {
if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
switch (type) {
case 1:
return @"2G";
break;
case 2:
return @"3G";
case 3:
return @"4G";
case 5:
return @"WIFI";
default:
return @“NO-WIFI";//代表未知網絡
break;
}
當然,此方法存在一定的局限性杉编,比如當狀態(tài)欄被隱藏的時候超全,無法使用此方法咆霜。
參考
方法二:使用第三方庫AFNetWorking判斷(使用前記得導入 #import "AFNetworking.h")
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager ] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -1:
NSLog(@"未知網絡");
break;
case 0:
NSLog(@"網絡不可達");
break;
case 1:
NSLog(@"GPRS網絡");
break;
case 2:
NSLog(@"wifi網絡");
break;
default:
break;
}
if(status ==AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
{
NSLog(@"有網");
}else
{
NSLog(@"沒有網");
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"網絡失去連接" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
alert.delegate = self;
[alert show];
}
}];
將此代碼寫在AppDelegate.m中,就可以實現(xiàn)實時監(jiān)測網絡狀態(tài)了卵迂。