1、判斷手機是否連接到網(wǎng)絡塑陵,iOS提供了一個SCNetworkReachabilityRef類垫桂,方便我們的使用。
2孵滞、創(chuàng)建一個工具類,方便全局調(diào)用
.h
#import <Foundation/Foundation.h>
@interface NetworkUtil : NSObject
+ (BOOL)isNetworkReachable;
@end
.m
#import "NetworkUtil.h"
#import <SystemConfiguration/SCNetworkReachability.h>
#import <netdb.h>
@implementation NetworkUtil
// networkチェック
+ (BOOL)isNetworkReachable
{
// Create zero addy
//創(chuàng)建零地址鸯匹,0.0.0.0的地址表示查詢本機的網(wǎng)絡連接狀態(tài)
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
// Recover reachability flags
// SCNetworkReachabilityFlags:保存返回的測試連接狀態(tài)
// 其中常用的狀態(tài)有:
// kSCNetworkReachabilityFlagsReachable:能夠連接網(wǎng)絡
// kSCNetworkReachabilityFlagsConnectionRequired:能夠連接網(wǎng)絡坊饶,但是首先得建立連接過程
// kSCNetworkReachabilityFlagsIsWWAN:判斷是否通過蜂窩網(wǎng)覆蓋的連接,比如EDGE殴蓬,GPRS或者目前的3G.主要是區(qū)別通過WiFi的連接匿级。
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL,
(struct sockaddr*)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}
@end
使用
#import "ViewController.h"
#import "NetworkUtil.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
BOOL result = [NetworkUtil isNetworkReachable];
NSLog(@"是否可以聯(lián)網(wǎng):%@",result?@"YES":@"NO");
}
@end