-
(NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
{
if
((flags
& kSCNetworkReachabilityFlagsReachable) == 0)
{
return
NotReachable;
}
BOOL
retVal
= NotReachable;
if
((flags
& kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{
retVal
= ReachableViaWiFi;
}
if
((((flags
& kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
(flags
& kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
{
if
((flags
& kSCNetworkReachabilityFlagsInterventionRequired) == 0)
{
retVal
= ReachableViaWiFi;
}
}
if
((flags
& kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
if
((flags
& kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {
if
((flags
& kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
retVal
= ReachableVia3G;
if
((flags
& kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
retVal
= ReachableVia2G;
}
}
}
}
return
retVal;
}
-(
BOOL
)connectedToNetWork
{
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(
"Error.
Count not recover network reachability flags\n"
);
return
NO
;
}
BOOL
isReachable
= flags & kSCNetworkFlagsReachable;
BOOL
needsConnection
= flags & kSCNetworkFlagsConnectionRequired;
return
(isReachable
&& !needsConnection) ?
YES
:
NO
;
}
-(
void
)checkNetworktype:(
id
)sender{
NSString
*connectionKind;
if
([
self
connectedToNetWork])
{
hostReach
= [Reachability reachabilityWithHostName:@
"www.google.com"
];
switch
([hostReach
currentReachabilityStatus]) {
case
NotReachable:
connectionKind
= @
"没有网络链接"
;
break
;
case
ReachableViaWiFi:
connectionKind
= @
"当前使用的网络类型是WIFI"
;
break
;
case
ReachableVia3G:
connectionKind
= @
"当前使用的网络链接类型是WWAN(3G)"
;
break
;
case
ReachableVia2G:
connectionKind
= @
"当前使用的网络链接类型是WWAN(2G)"
;
break
;
default
:
break
;
}
}
else
{
connectionKind
= @
"没有网络链接"
;
}
}