Я успешно использую Reachability для определения состояния сети и получения уведомлений об изменениях (например, Руководство по Reachability для iOS 4).
Мой вопрос не в том, как запустить Reachability, а в следующем.
Мой AppDelegate
отвечает за доступность. Приложение получает уведомления ( kReachabilityChangedNotification
) во время работы и в фоновом режиме ( applicationDidEnterBackground:
).
Приложение предназначено для перезагрузки воспроизводимого аудиопотока, когда оно замечает потерю соединения Wi-Fi, например. Для проверки я включал и выключал Wi-Fi в настройках, и все работало отлично.При тестировании в реальных условиях я часто терял подключение к Wi-Fi, когда выходил за пределы зоны действия точки доступа. Я обнаружил, что Reachability не слишком помогает мне в этом случае. Я не уверен, связано ли это с тем, что уведомления Reachability не приходят, когда экран заблокирован, или с тем, что Reachability не справляется с медленным уменьшением сигнала от все более удаленной точки доступа Wi-Fi, но тем не менее я не могу понять почему реальное тестирование не соответствует идеализированному случаю.
Вот как выглядит мой код. Сначала я настраиваю получение уведомлений и начинаю слушать Reachability:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkNetworkStatus:)
name:kReachabilityChangedNotification object:nil];
// Set up Reachability
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
....
return YES;
}
, а затем это функция, которая реагирует на изменения в подключении:
- (void)checkNetworkStatus:(NSNotification *)notice {
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI");
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN!");
break;
}
}
}
Уведомления приходят, даже когда приложение находится в фоновом режиме, но они не не в реальном тестировании, описанном выше.
Спасибо за любую помощь.