2013-11-01 4 views
5

Можно ли получать уведомление или что-то внутри моего приложения, когда доступ к интернету BECOMES доступен. Я знаю о достижимости и всех вещах. Но я хочу начать некоторые ожидающие NSUrlConnections, когда доступ к Интернету станет доступным на устройстве. Есть ли простой способ сделать это, потому что я не хочу использовать поток цикла, который постоянно проверяет доступность. Какие-либо предложения?Уведомление, когда Интернет стал доступен на iOS

+2

Из вашего вопроса я не понимаю, почему с помощью достижимости и регистрации для ReachabilityChangedNotification s не будет работать , Что вы ищете, чего невозможно достичь? – Alex

+1

[Достижимость] (https://developer.apple.com/Library/ios/samplecode/Reachability/Introduction/Intro.html) действительно стоит другого взгляда. Вы не должны зацикливаться, но, как и этот пример кода, вызывайте 'startNotifier', и вы получите уведомление при изменении подключения к Интернету. – Rob

+0

Я не согласен, что этот вопрос повторяется. Ответ предоставлен об использовании Reachability, но вопрос в том, чтобы обновить статус соединения. Как я уже писал в своем ответе, «Достижимость» ничего не гарантирует, это скорее помощник. Предложив кому-то, что Доходность - это правильный ответ, может привести к тому, что в приложении будут применены нечестивые состояния! –

ответ

2

Хорошо, здесь очень хороший пост о достижимости: http://www.mikeash.com/pyblog/friday-qa-2013-06-14-reachability.html (проверьте комментарии ниже!)
Tldr: Вы можете запустить блок, когда ваше соединение назад, но это решение не является совершенным. Существует 100% надежный способ сделать это (за исключением попытки цикла), но вы можете попытаться смешать эти подходы.

Edit: Комментарий к @ Jonah.at.GoDaddy ответ:
достижимости может дать вам как ошибки уведомления о соединении: ложные положительные и ложно отрицательные (вы можете проверить его на WWDC 2011 сессии, я не помню, какой из них; есть две о сети). Итак, я хочу сказать: вы никогда не должны полагаться только на это уведомление. Вы можете активировать обновление при изменении статуса, но должен быть другой способ сделать это (взаимодействие с пользователем или какое-то активное ожидание).

0

Вот код, который я использую ... это может быть немного больше, чем нужно:

-(void)checkNetworkStatus 
{ 
    // check for internet connection 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

    // check if a pathway to a random host exists 
    self.hostReachable = [Reachability reachabilityWithHostname:@"google.com"]; 
    [self.hostReachable startNotifier]; 
} 


-(void) checkNetworkStatus:(NSNotification *)notice 
{ 
    NetworkStatus hostStatus = [self.hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      DDLogInfo(@"A gateway to the host server is down."); 
      if(self.canReachGoogle) 
      { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle: LOCALIZED_NoInternetConnection 
                  message: LOCALIZED_ConnectionNeeded 
                  delegate:self cancelButtonTitle:LOCALIZED_Ok otherButtonTitles:nil]; 
       [alert show]; 
      } 
      self.canReachGoogle = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      DDLogInfo(@"A gateway to the host server is working via WIFI."); 
      self.canReachGoogle = YES; 

      break; 
     } 
     case ReachableViaWWAN: 
     { 
      DDLogInfo(@"A gateway to the host server is working via WWAN."); 
      self.canReachGoogle = YES; 

      break; 
     } 
    } 
    DDLogInfo(@"Network connection has changed and is now: %@", self.canReachGoogle ? @"enabled" : @"disabled"); 
} 
+0

Да, но это зависит от Google. Не лучший подход. А также я попросил изменения в достижимости, а не достижимости в определенное время. – user2387149

Смежные вопросы