.#### - 可以利用AFNetworking實現監測手機網絡狀態的功能
- 創建監聽管理者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
- 開始進行監控
[manager startMonitoring];
- 判斷當前狀態
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
/*
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, //未知
AFNetworkReachabilityStatusNotReachable = 0, //無連接
AFNetworkReachabilityStatusReachableViaWWAN = 1, //3G
AFNetworkReachabilityStatusReachableViaWiFi = 2, //WIFI
};
*/
case AFNetworkReachabilityStatusUnknown:
{
NSLog(@"未知網絡");
}
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"無法聯網");
}
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
{
NSLog(@"當前使用的是2g/3g/4g網絡");
}
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
{
NSLog(@"當前在WIFI網絡下");
}
}
}];
- 還可以利用蘋果提供的Reachablity庫進行實現
蘋果官方提供的Doc,下載地址: http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
Reachability類:這個類用于檢測當前網絡狀態,是蘋果公司對SCNetworkReachability API的封裝,這個API定義在SystemConfigure.framework庫中。如果有其他特別的需求,也可以直接使用這個原生的SCNetworkReachability類。Reachability類不是SDK的一部分,可以在iOS Developer Library里找到這份代碼。
如何使用Reachability
從蘋果網站上下載Reachability.zip文件,解壓之。
-
重用Reachability類
(1)把Reachability.h和Reachability.m文件拖到項目中。
(2)添加框架:SystemConfiguration.framework。
因為Reachablity只能監聽網絡狀態的狀況,不能監聽它的改變,所以采用通知的方式
- 首先添加引用
@property (nonatomic) Reachability *internetReachability;
- 然后在viewDidLoad中添加監聽
- (void)viewDidLoad {
[super viewDidLoad];
//創建監聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
//生成對象
self.internetReachability = [Reachability reachabilityForInternetConnection];
[self.internetReachability startNotifier];
//由于kReachabilityChangedNotification監聽只有在網絡狀態改變時才會生效,所以調用此方法,主動判斷網絡狀態
[self updateInterfaceWithReachability:self.internetReachability];
}
-(void)reachabilityChanged:(NSNotification *)note{
Reachability *curReach = [note object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
[self updateInterfaceWithReachability:curReach];
}
- (void)updateInterfaceWithReachability:(Reachability *)reachability{
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"無網絡");
break;
case ReachableViaWiFi:
NSLog(@"WIFI");
break;
case ReachableViaWWAN:
NSLog(@"手機網絡");
break;
default:
break;
}
}
- 最后銷毀監聽
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}
但是第一次嘗試的時候,沒有添加引用,發現在頁面加載時檢測到網絡狀態,但是在網絡狀態改變是不會調用通知,要注意這樣寫是不行的
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
[self updateInterfaceWithReachability:reach];
[reach startNotifier];
}