最近經(jīng)常會碰到一些問到如何判斷手機(jī)網(wǎng)絡(luò),在這里我簡單的介紹幾種方法:
一、RealReachability Demo下載
使用Reachability時,如果網(wǎng)絡(luò)變化,會給出一個通知,但是我們獲取的網(wǎng)絡(luò)狀態(tài)只有WiFi/WWAN/NotReach幾種。我們可以在Reachability返回的通知里,WWAN這種類型下,再做上面的網(wǎng)絡(luò)判斷即可。但是更優(yōu)的做法就將判斷放在Reachability中,在使用的時候直接返回不同的網(wǎng)絡(luò)狀態(tài)。
由于最新的Reachability已經(jīng)支持了IPV6,我也是在最新的Reachability上做了一些改進(jìn)。
大部分方法跟Reachability一樣,我擴(kuò)展了枚舉類型,修改了網(wǎng)絡(luò)狀態(tài)判斷。
主要修改如下:
typedef NS_ENUM(NSUInteger, HJNetWorkStatus) {
HJNetWorkStatusNotReachable = 0,
HJNetWorkStatusUnknown = 1,
HJNetWorkStatusWWAN2G = 2,
HJNetWorkStatusWWAN3G = 3,
HJNetWorkStatusWWAN4G = 4,
HJNetWorkStatusWiFi = 5,
};
簡單的介紹下RealReachability使用
頭文件:#import "RealReachability.h"
@property (nonatomic, assign) BOOL isUserReal; // 當(dāng)前網(wǎng)絡(luò)是否可用
@property (nonatomic, assign) NSInteger status; // 當(dāng)前網(wǎng)絡(luò)狀態(tài)
//發(fā)送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netWorkChanged:) name:kRealReachabilityChangedNotification object:nil];
- (void)netWorkChanged:(NSNotification *)notification
{
RealReachability *reachability = (RealReachability *)notification.object;
ReachabilityStatus status = [reachability currentReachabilityStatus];
self.isUserReal = YES;
switch (status) {
case RealStatusNotReachable:
self.isUserReal = NO;
self.status = 0;
[self alertMessage:@"沒網(wǎng)絡(luò)"];
break;
case RealStatusViaWiFi:
self.isUserReal = YES;
self.status = 1;
[self alertMessage:@"WIFI"];
break;
case RealStatusViaWWAN:
self.isUserReal = YES;
self.status = 2;
[self alertMessage:@"2G/3G/4G"];
break;
default:
break;
}
}
二、根據(jù)狀態(tài)欄的wifi標(biāo)志
- (NSString *)getNetWorkStates{
UIApplication *app = [UIApplication sharedApplication];
NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
NSString *state = [[NSString alloc]init];
int netType = 0;
//獲取到網(wǎng)絡(luò)返回碼
for (id child in children) {
if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
//獲取到狀態(tài)欄
netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];
switch (netType) {
case 0:
state = @"無網(wǎng)絡(luò)";
//無網(wǎng)模式
break;
case 1:
state = @"2G";
break;
case 2:
state = @"3G";
break;
case 3:
state = @"4G";
break;
case 5:
{
state = @"wifi";
break;
default:
break;
}
}
}
//根據(jù)狀態(tài)選擇
return state;
}
結(jié)束語
到這里就結(jié)束了,如若不懂的話可以??留言,也可以加入群討論
喜歡的話 記得關(guān)注、收藏、點贊喲