Самый простой способ определить, доступно ли подключение к Интернету iPhone?
Я ищу, чтобы определить, доступно ли подключение к Интернету на iPhone. Для приложения не имеет значения, будет ли он wifi или EDGE или что-то еще.
Использование кода из примера SeismicXML, похоже, не работает, а пример кода для Reachability от Apple кажется излишним для приложения...
Есть ли быстрый и простой способ определения доступности сети на iPhone?
Спасибо,
Бен
Ответы
Ответ 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
}
Хорошо, надеюсь, что это кому-то поможет... Похоже, что обычный способ отклонить приложение...
Ответ 4
Ссылка на пример доступности,
http://developer.apple.com/iphone/library/samplecode/Reachability/index.html
Ответ 5
Это самое быстрое и простое решение для вашей проблемы:
([NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]!=NULL)?YES:NO;
Он вернет YES
, если он подключен, или NO
, если это не так. Он просто пытается загрузить google, и если он преуспеет, чем возвращает YES
.
Тогда вы можете иметь оператор if
с возвращаемым значением, чтобы вы могли вызывать уведомление или что угодно.
Ответ 6
Моя первая идея - посмотреть, могу ли я подключиться к Google.