今天項目要做一個優(yōu)化,把上報失敗的數(shù)據(jù)保存起來,等有網(wǎng)絡的時候就上傳服務器,所以這里就要用到實時檢測網(wǎng)絡的功能了。剛開始我的思路是自己注冊一個全局的通知來實現(xiàn),但是又想了解下別人的思路,于是上網(wǎng)搜了下就搜到了Reachability和AFN都可以實現(xiàn)的。但是我個人覺得AFN比較好用,當程序在后臺運行時,也可以檢測網(wǎng)絡狀態(tài)的改變,省去了不少的麻煩。
廢話少說,進入主題吧~
一、AFNetworing檢測網(wǎng)絡
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 當網(wǎng)絡狀態(tài)改變時調(diào)用
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知網(wǎng)絡");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"沒有網(wǎng)絡");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手機自帶網(wǎng)絡");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
}
}];
//開始監(jiān)控
[manager startMonitoring]
二、Reachability
1.注冊通知
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
// 創(chuàng)建Reachability
Reachability *reachability = [Reachability reachabilityForInternetConnection];
// 開始監(jiān)控網(wǎng)絡(一旦網(wǎng)絡狀態(tài)發(fā)生改變, 就會發(fā)出通知kReachabilityChangedNotification)
[reachability startNotifier];
2.監(jiān)聽方法
- (void)networkStateChange
{
// 1.檢測網(wǎng)絡狀態(tài)
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.檢測手機是否能上網(wǎng)絡
Reachability *connect = [Reachability reachabilityForInternetConnection];
// 3.判斷網(wǎng)絡狀態(tài)
if ([wifi currentReachabilityStatus] != NotReachable) {
NSLog(@"有wifi");
}
else if ([connect currentReachabilityStatus] != NotReachable) {
NSLog(@"使用手機自帶網(wǎng)絡進行上網(wǎng)");
}
else {
NSLog(@"沒有網(wǎng)絡");
}
}
以上為兩種檢測網(wǎng)絡狀態(tài)的方法,我個人覺得AFN比較好用,希望對大家有所幫助。