Самый простой способ определить, доступно ли интернет-соединение iPhone? - PullRequest
12 голосов
/ 24 апреля 2009

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

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

Существует ли быстрый и простой способ определения доступности сети на iPhone?

Спасибо, Ben

Ответы [ 6 ]

24 голосов
/ 27 декабря 2010

Выполните следующие 3 простых шага -

Шаг 1: Включить инфраструктуру SystemConfiguration.framework в ваш проект

Шаг 2: Включает Apple Reachability.h и Reachability.m из примера Reachability

Шаг 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;
    }
}
9 голосов
/ 24 апреля 2009

Я включил 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;
}
}
7 голосов
/ 24 апреля 2009

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

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

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 голосов
/ 24 сентября 2009

Ссылка на пример доступности;
http://developer.apple.com/iphone/library/samplecode/Reachability/index.html

1 голос
/ 12 мая 2010

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

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

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

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

0 голосов
/ 24 апреля 2009

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

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