對App進行實時的網(wǎng)絡(luò)狀態(tài)監(jiān)聽也是項目中的一項比較重要的功能.
在寫項目的時候也查閱了很多資料,基本就兩種方法:Reachability和AFNetworking兩種方法.
這兩種方法的具體實現(xiàn)方法在簡書上都有很多很不錯的文章講過
但這篇文章我想講講查到的另一個判斷網(wǎng)絡(luò)類型的方法---通過狀態(tài)欄判斷網(wǎng)絡(luò)類型
我的項目內(nèi)采用的是AFNetworkReachabilityManager,它的底層代碼就是對系統(tǒng)的Reachability的二次封裝,使用起來能更方便些.話不多說了,看一下具體的實現(xiàn)
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status)
{
//結(jié)合MBProgressHUD進行顯示:
case -1: //AFNetworkReachabilityStatusUnknown
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"未知網(wǎng)絡(luò)";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
case 0: //AFNetworkReachabilityStatusNotReachable
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"無法連接";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
case 1: //AFNetworkReachabilityStatusReachableViaWWAN
{
//這里是本文的核心點:采用遍歷查找狀態(tài)欄的顯示網(wǎng)絡(luò)狀態(tài)的子視圖,通過判斷該子視圖的類型來更詳細的判斷網(wǎng)絡(luò)類型
NSArray *subviewArray = [[[[UIApplication sharedApplication] valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
int type = 0;
for (id subview in subviewArray)
{
if ([subview isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")])
{
type = [[subview valueForKeyPath:@"dataNetworkType"] intValue];
}
switch (type)
{
case 1:
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"當前為2G網(wǎng)絡(luò)";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
case 2:
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"當前為3G網(wǎng)絡(luò)";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
case 3:
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"當前為4G網(wǎng)絡(luò)";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
default:
break;
}
}
}
break;
case 2: //AFNetworkReachabilityStatusReachableViaWiFi
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"當前為WIFI";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
default:
{
//提示框:
MBProgressHUD *textOnlyHUD = [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
textOnlyHUD.mode = MBProgressHUDModeText;
textOnlyHUD.labelText = @"無網(wǎng)絡(luò)連接";
[textOnlyHUD hide:YES afterDelay:1.f];
}
break;
}
}];
//開始監(jiān)測
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
最后的實現(xiàn)效果:
此方法最大的好處就是能夠更詳細的監(jiān)聽網(wǎng)絡(luò)類型,能夠和用戶的視覺信息一致,會有更好的用戶體驗.(個人感覺)希望能夠給大家一點收獲,我覺得拓寬思路,這種方法還能有更高的使用價值
(ps:如有任何問題,歡迎隨時找我交流,共同進步??)