1. IPhone目前提供可以检查配置状态,比如
网络连接状态
Wi-Fi可使用状态
cell service可使用状态
但是没有API可用于检测 "蓝牙连接" 状态 或者检测用户是否在漫游(roaming)状态
2. 检测IP是否可以reachable
SCNetworkReachabilityCreateWithAddress
-(BOO) connectedToNetwork
{
//Create zero addy
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags)
{
printf("Could not recover network flags\n");
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && needsConnection);
}
///UIDevice for Reachability
@implementation UIDevice (Reachability)
SCNetworkConnectionFlags connectionFlags;
+(NSString *)localWiFiIPAddress
{
BOOL success;
struct ifaddrs *addrs;
const struct ifaddrs *cursor;
success = getifaddrs(&addrs) == 0;
if (success)
{
cursor = addrs;
while(cursor != NULL) {
if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)
{
NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];
if ([name isEqualToString:@"en0"])
return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *) cursor->ifa_addr)->sin_addr)];
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return nil;
}
P580 cookbook
应用如何获取网路改变
P583