首先,項目要在App打開時監聽網絡狀態,Wi-Fi和運營商有網絡時開啟MQTT連接。利用AFN實現網絡狀態監聽。
1、在AppDelegate.m中引入#import "AFNetworking.h"
枚舉網絡狀態
typedef enum : NSUInteger {
unknown,
notConnect,
wwan,
wifi,
} Networkstatus;
開啟網絡監聽
[self networkMonitoring];//開啟網絡監聽
#pragma mark - NetworkMonitoring
-(void)networkMonitoring{
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];//開啟監聽
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
self.networkstatus = unknown;
NSLog(@"當前網絡未知");
break;
case AFNetworkReachabilityStatusNotReachable:
self.networkstatus = notConnect;
NSLog(@"當前無網絡連接");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
self.networkstatus = wifi;
//連接 mqtt服務器
[self connnetMQTTServer];
NSLog(@"當前使用無線網絡");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
self.networkstatus = wwan;
//連接 mqtt服務器
[self connnetMQTTServer];
NSLog(@"當前使用運營商網絡");
break;
default:
break;
}
}];
}
到這為止已經可以監聽網絡方法,但是因為監聽是耗時操作,如果在首頁viewController中同樣寫這個方法當返回時只走一個viewController,在Appdelegete的方法不會 執行
因此,在別的頁面用通知監聽狀態改變
//-(void)viewDidLoad 中
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(AFNNetWorkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
- (void)AFNNetWorkStatusChanged:(NSNotification *)notice{
NSDictionary *dic = notice.userInfo; //獲取網絡狀態
NSInteger status = [[dic objectForKey:@"AFNetworkingReachabilityNotificationStatusItem"] integerValue];
if(status == AFNetworkReachabilityStatusNotReachable) {
//無網絡連接
[self.locService stopUserLocationService];//停止定位
UIAlertView *alertV = [[UIAlertView alloc] initWithTitle:@"溫馨提示" message:@"當前暫無網絡連接" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];
[alertV show];
}else if (status == AFNetworkReachabilityStatusReachableViaWiFi || status == AFNetworkReachabilityStatusReachableViaWWAN) { }else{
}
}
—— end ——