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