Detección de la conectividad a Internet continuamente.

Quiero que mi aplicación detecte automáticamente la pérdida de connection a Internet. Entonces, estoy usando el siguiente código.

- (void)applicationDidBecomeActive:(UIApplication *)application { Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [networkReachability currentReachabilityStatus]; if (networkStatus == NotReachable) { [Settings hideSpinner]; //Show no internet connectivity dialog. } else { } } 

Pero el problema es que no está comprobando continuamente la conectividad a Internet. Verifica solo cuando la aplicación se ha activado. ¿Cómo puedo comprobar continuamente la connection a Internet durante todo el ciclo de vida de la aplicación y lanzar una advertencia si el Internet se apaga automáticamente?

Agregue obeserver así en el método Reachability.

1) [[NSNotificationCenter defaultCenter] addObserver: auto selector: @selector (reachabilityChanged 🙂 name: kReachabilityChangedNotification object: nil] ;

Llamará automáticamente cuando la aplicación se abra / en modo de background y llame a reachabilityChanged.

2) [[NSNotificationCenter defaultCenter] postNotificationName: @ object "ChangeInternetConnection": nil];

ChangeInternetConnection tiene que agregar un observador a su ViewController para get el estado cuando Internet cambia su estado.

  - (void) checkInternetConnetion { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; //NSString *remoteHostName = @"www.apple.com"; self.internetReachability = [Reachability reachabilityForInternetConnection]; [self.internetReachability startNotifier]; [self updateInterfaceWithReachability:self.internetReachability]; } #pragma mark - Reachability Methods - (void)updateInterfaceWithReachability:(Reachability *)reachability { if (reachability == self.internetReachability) { [self checkStatus:reachability]; } if (reachability == self.wifiReachability) { [self checkStatus:reachability]; } } -(void)checkStatus :(Reachability *)reachability { NetworkStatus netStatus = [reachability currentReachabilityStatus]; BOOL connectionRequinetworking = [reachability connectionRequinetworking]; NSString* statusString = @""; switch (netStatus) { case NotReachable: { self.isInternetOn = FALSE; break; } case ReachableViaWWAN: { self.isInternetOn = TRUE; break; } case ReachableViaWiFi: { self.isInternetOn = TRUE; break; } } [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeInternetConnection" object:nil]; } - (void) reachabilityChanged:(NSNotification *)note { Reachability* curReach = [note object]; NSParameterAssert([curReach isKindOfClass:[Reachability class]]); [self updateInterfaceWithReachability:curReach]; } 

Una vez que su aplicación se haya iniciado, puede despedir a un NSTimer para que haga lo mismo:

 - (void)applicationDidBecomeActive:(UIApplication *)application { NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(checkForConnectivity) userInfo:nil repeats:YES]; } -(void)checkForConnectivity { Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [networkReachability currentReachabilityStatus]; if (networkStatus == NotReachable) { //No internet connectivity - perform requinetworking action } else { //Internet connectivity is valid } } 

¡Gracias!

El timer no es una forma eficiente de hacer esto, pero también puede usar el timer también.

 - (void)applicationDidBecomeActive:(UIApplication *)application { NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(handleConnectivity) userInfo:nil repeats:YES]; } -(void)handleConnectivity { Reachability *networkReachability = [Reachability reachabilityForInternetConnection]; NetworkStatus networkStatus = [networkReachability currentReachabilityStatus]; if (networkStatus == NotReachable) { //No internet connectivity - perform requinetworking action } else { //Internet connectivity is valid } } 

La mejor manera es usar el código de Alcance. Marque aquí el código de ejemplo de manzana. Tiene una gran cantidad de methods de conveniencia para verificar la disponibilidad de Internet, el control de conectividad Wifi / WAN, etc.

Por ejemplo:-

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil]; reachability = [Reachability reachabilityForInternetConnection]; [reachability startNotifier]; - (void)networkChanged:(NSNotification *)notification { NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus]; if(remoteHostStatus == NotReachable) { NSLog(@"not reachable");} else if (remoteHostStatus == ReachableViaWiFiNetwork) { NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) { NSLog(@"carrier"); } } 

Solo puedes verificar estas cosas en segundo plano.

* audio: la aplicación reproduce contenido audible para el usuario mientras está en segundo plano. (Este contenido incluye la transmisión de contenido de audio o video usando AirPlay).

* location: la aplicación mantiene a los usuarios informados de su location, incluso mientras se está ejecutando en segundo plano.

* voip: la aplicación ofrece la posibilidad de que el usuario realice llamadas telefónicas mediante una connection a Internet.

* newsstand-content-La aplicación es una aplicación Kiosco que descarga y procesa contenido de revistas o periódicos en segundo plano.

* external-accessory-La aplicación funciona con un accesorio de hardware que necesita entregar actualizaciones de forma regular a través del marco de accesorios externos.

* bluetooth-central: la aplicación funciona con un accesorio Bluetooth que necesita entregar actualizaciones en un horario regular a través del marco Core Bluetooth.

* bluetooth-peripheral-La aplicación admite la comunicación Bluetooth en modo periférico a través del marco Core Bluetooth.

Primero importa en tu class: #import "Reachability.h"

Luego haz como sigue:

agregar un observador para la notificación de cambio de scope

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; -(BOOL)reachabilityChanged:(NSNotification*)note { BOOL status =YES; NSLog(@"reachabilityChanged"); Reachability * reach = [note object]; if([reach isReachable]) { status = YES; NSLog(@"your network is Available"); } else { status = NO; //Do something here } return status; } 

Agregar un observador.

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; -(BOOL)reachabilityChanged:(NSNotification*)note { BOOL status =YES; NSLog(@"reachability is changed"); Reachability * reach = [note object]; if([reach isReachable]) { status = YES; NSLog(@"NetWork is Available. Please go ahead"); } else { status = NO; NSLog(@"NetWork is not Available. Please check your connection."); } return status; }