iPhone 网络连接检测(Wifi,3G,Edge),功能有点像Reachability
这个类可以用来检测用户是否连接到internet.用法非常简单,只有一个方法,返回 YES或NO。一个简单的例子:
view plain
[*]if () {...}
[*]else {...}
这个类的头文件:
view plain
[*]//
[*]//Connection.h
[*]//
[*]#import <Foundation/Foundation.h>
[*]#import <SystemConfiguration/SystemConfiguration.h>
[*]#import <netinet/in.h>
[*]#import <arpa/inet.h>
[*]#import <netdb.h>
[*]
[*]@interface Connection : NSObject {
[*]
[*]}
[*]
[*]+ (BOOL) isConnected;
[*]
[*]@end
类的实现文件:
view plain
[*]//
[*]//Connection.m
[*]//
[*]
[*]#import "Connection.h"
[*]
[*]@implementation Connection
[*]
[*]+ (BOOL) isConnected {
[*] // Create zero addy
[*] struct sockaddr_in zeroAddress;
[*] bzero(&zeroAddress, sizeof(zeroAddress));
[*] zeroAddress.sin_len = sizeof(zeroAddress);
[*] zeroAddress.sin_family = AF_INET;
[*] // Recover reachability flags
[*] SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
[*] SCNetworkReachabilityFlags flags;
[*] BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
[*] CFRelease(defaultRouteReachability);
[*] if (!didRetrieveFlags) {
[*] NSLog(@"Error. Could not recover network reachability flags");
[*] return NO;
[*] }
[*] BOOL isReachable = flags & kSCNetworkFlagsReachable;
[*] BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
[*] BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
[*] NSURL *testURL = ;
[*] NSURLRequest *testRequest = ;
[*] NSURLConnection *testConnection = [[ initWithRequest:testRequest delegate:self] autorelease];
[*] return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO;
[*]}
[*]
[*]@end
最后别忘了添加必要的frameworks: SystemConfiguration and libz.1.1.3.dylib
标题中提到的Reachability也具有检测网络的功能。大家可以参考资料:http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/
http://blog.iyunv.com/favormm/article/details/5352656
页:
[1]