Я использую Код доступности Apple , чтобы определить, есть ли подключение к Интернету или нет.
Теперь я обнаружил, что, когда я включаю Cellular и WIFI, мой чек на Cellular показывает FALSE, а мой WIFI - TRUE.
Я попытался изменить возвращаемое значение NetworkStatus для этого .. Но безуспешно.
Может ли кто-нибудь помочь мне с этим вопросом ???
То, что я хочу, это когда обе сети включены, моя Reachability должна показывать TRUE для обоих.
Может ли кто-нибудь помочь мне понять следующие пункты:
Что будет SCNetworkReachabilityGetFlags(reachabilityRef, &flags)
делать точно ??
Как проверить только для networkStatusForFlags
в коде ниже ??
- (NetworkStatus) currentReachabilityStatus
{
NSAssert(reachabilityRef != NULL, @"currentNetworkStatus called with NULL reachabilityRef");
NetworkStatus retVal = NotReachable;
SCNetworkReachabilityFlags flags;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
if(localWiFiRef)
{
retVal = [self localWiFiStatusForFlags: flags];
}
else
{
retVal = [self networkStatusForFlags: flags];
}
}
return retVal;
}
Также как изменить код ниже, чтобы получить только NetworkStatusForFlags
- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
{
if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
{
// if target host is not reachable
return NotReachable;
}
BOOL retVal = NotReachable;
if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{
// if target host is reachable and no connection is required
// then we'll assume (for now) that your on Wi-Fi
retVal = ReachableViaWiFi;
}
if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
{
// ... and the connection is on-demand (or on-traffic) if the
// calling application is using the CFSocketStream or higher APIs
if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
{
// ... and no [user] intervention is needed
retVal = ReachableViaWiFi;
}
}
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
{
// ... but WWAN connections are OK if the calling application
// is using the CFNetwork (CFSocketStream?) APIs.
retVal = ReachableViaWWAN;
}
return retVal;
}
РЕДАКТИРОВАТЬ:
Я использую имя хоста как www.apple.com и также пытался http://www.apple.com. Но в WIFI я получаю TRUE и только в сотовой сети я получаю FALSE.
+ (MTPReachability*) reachabilityWithHostName: (NSString*) hostName;
{
MTPReachability* retVal = NULL;
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]);
if(reachability!= NULL)
{
retVal= [[[self alloc] init] autorelease];
if(retVal!= NULL)
{
retVal->reachabilityRef = reachability;
retVal->localWiFiRef = NO;
}
}
return retVal;
}