Подтвердить что ты не робот

Самый простой способ определить, доступно ли подключение к Интернету iPhone?

Я ищу, чтобы определить, доступно ли подключение к Интернету на iPhone. Для приложения не имеет значения, будет ли он wifi или EDGE или что-то еще.

Использование кода из примера SeismicXML, похоже, не работает, а пример кода для Reachability от Apple кажется излишним для приложения...

Есть ли быстрый и простой способ определения доступности сети на iPhone?

Спасибо, Бен

4b9b3361

Ответ 1

Следуйте за тремя простыми шагами -

Шаг 1: Включите фреймворк SystemConfiguration.framework в свой проект

Шаг 2: Включено приложение Apple Reachability.h и Reachability.m из примера возможности использования

Шаг 3: Теперь добавьте этот код в любом месте вашего .m.

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

switch (netStatus)
{
    case NotReachable:
    {
        NSLog(@"Access Not Available");
        break;
    }

    case ReachableViaWWAN:
    {
        NSLog(@"Reachable WWAN");
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"Reachable WiFi");
        break;
    }
}

Ответ 2

Я включил Apple Reachability.h и .m из своего примера Reachability плюс инфраструктуру SystemConfiguration, упомянутую выше, а затем добавил к моему приложению следующий код, который имеет два преимущества по сравнению с вышеприведенным ответом - он дает вам больше информации и вы получаете асинхронные уведомления об изменении состояния сети.

В своем делете приложения или аналогичном добавьте его при запуске:

[self startReachability];

Затем добавьте этот метод, который вызывается при изменении сети:

#pragma mark Reachability changed
- (void)reachabilityChanged:(NSNotification*)aNote
{
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];

switch (self.remoteHostStatus)
{
case NotReachable:
  debugForComponent(kDebugMaskApp,@"Status changed - host not reachable");
  break;

case ReachableViaCarrierDataNetwork:
  debugForComponent(kDebugMaskApp,@"Status changed - host reachable via carrier");
  break;

case ReachableViaWiFiNetwork:
  debugForComponent(kDebugMaskApp,@"Status changed - host reachable via wifi");     
  break;

default:
  debugForComponent(kDebugMaskApp,@"Status changed - some new network status");
  break;
}
}

Ответ 3

Я понял это после взлома XCode после попытки скопировать SystemConfiguration.framework в... Вот решение для всех, кто может быть заинтересован...

Добавьте SystemConfiguration.framework в ваш проект, выполните #import < SystemConfiguration/SystemConfiguration.h > , затем добавьте следующий код:

SCNetworkReachabilityFlags flags;
BOOL receivedFlags;

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"google.com" UTF8String]);
receivedFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
CFRelease(reachability);

if (!receivedFlags || (flags == 0) )
{
    // internet not available
} else {
    // internet available
} 

Хорошо, надеюсь, что это кому-то поможет... Похоже, что обычный способ отклонить приложение...

Ответ 5

Это самое быстрое и простое решение для вашей проблемы:

([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO; 

Он вернет YES, если он подключен, или NO, если это не так. Он просто пытается загрузить google, и если он преуспеет, чем возвращает YES.

Тогда вы можете иметь оператор if с возвращаемым значением, чтобы вы могли вызывать уведомление или что угодно.

Ответ 6

Моя первая идея - посмотреть, могу ли я подключиться к Google.