Я успешно использую Reachability, чтобы определить состояние сети и получать уведомления об изменениях (например, Руководство по доступу для iOS 4 ).
Мой вопрос не в том, как настроить Reachability, а скорее в следующем.
Мой AppDelegate
обрабатывает вещи Reachability. Приложение получает уведомления (kReachabilityChangedNotification
) как во время работы приложения, так и когда приложение находится в фоновом режиме (applicationDidEnterBackground:
).
Приложение предназначено для перезагрузки воспроизводимого аудиопотока, когда оно замечает, что потеряно соединение Wi-Fi, например Чтобы проверить, я включил и выключил Wi-Fi в настройках, и все работало отлично. В реальных испытаниях я часто теряю подключение к Wi-Fi, когда выхожу из зоны доступа. Я обнаружил, что в этом случае 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;
}
}
}
Уведомления приходят даже тогда, когда приложение работает в фоновом режиме, но в реальных тестах, описанных выше, они отсутствуют.
Спасибо за любую помощь.