Я хочу получить звонок, когда сеть переходит на iPhone.
Я использую руководство Reachability.m от Apple следующим образом:
xxx.m
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
Reachability = [self reachabilityWithAddress: (const struct sockaddr *) &zeroAddress]
Reachability.m
BOOL returnValue = NO;
SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL};
if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context))
{
if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetMain(), kCFRunLoopDefaultMode))
{
returnValue = YES;
}
}
return returnValue;
xxx.m
ReachabilityCallback {
//do something when network change
}
Я тестирую смену мобильного телефона (4G) на wifi1
, получает вызов как
Status4G
StatusNone
StatusWifi1
При изменении формы wifi1 на wifi2
StatusWifi1
StatusNone
StatusWifi2
Однако иногда, когда wifi меняется очень быстро и не меняется на StatusNone
, я не получаю обратный вызов, когда я меняю wifi1 на wifi2 или наоборот,
Что я хочу получить, это
StatusWifi1
StatusWifi2
-------------------------UPDATE----------------------------
Спасибо @Hitesh Surani, теперь мой вопрос иногда возникает на некоторых устройствах, я не получил disconnect state
, Я пытаюсь использовать
[self reachabilityWithAddress: @"www.google.com"]
Заменить
[self reachabilityWithAddress: (const struct sockaddr *) &zeroAddress]
Теперь я могу получить обратный вызов, когда Wi-Fi меняется, даже если он не превратился в disconnect state
, но я все еще не сделалИзвестно почему, вот изменение состояния:
//wifi1:
1 kSCNetworkReachabilityFlagsReachable
//wifi1 -> wifi2
2 kSCNetworkReachabilityFlagsReachable | kSCNetworkReachabilityFlagsTransientConnection
3 kSCNetworkReachabilityFlagsReachable
при изменении wifi существует состояние tmp kSCNetworkReachabilityFlagsReachable | kSCNetworkReachabilityFlagsTransientConnection
, поэтому я могу обнаружить изменения wifi, но что означает kSCNetworkReachabilityFlagsTransientConnection
?Я читаю документацию Apple, все еще в замешательстве.