restricciones recuperar pantalla olvide notificaciones eliminar como codigo centro bloqueada ios networking reachability

recuperar - ¿Cómo obtener notificaciones de accesibilidad en iOS en segundo plano al abandonar la red Wi-Fi?



recuperar notificaciones iphone (2)

De forma predeterminada, en la aplicación de estado de fondo se mantiene durante un tiempo corto, la mayoría de las aplicaciones pasan al estado suspendido poco después. Eso significa que la aplicación está en segundo plano pero no está ejecutando código. Por lo tanto, su notificación implementada personalizada no funciona. Debe volver a consultar NetworkReachability at Wakeup Time en los métodos de delegado de la aplicación:

applicationWillEnterForeground: applicationDidBecomeActive

Estoy usando Reachability con éxito para determinar el estado de la red y recibir notificaciones de cambios (por ejemplo, la Guía de accesibilidad para iOS 4 ).

Mi pregunta no es cómo poner en funcionamiento Reachability, sino más bien lo siguiente.

Mi AppDelegate maneja las cosas de Accesibilidad. La aplicación recibe notificaciones ( kReachabilityChangedNotification ) mientras se ejecuta la aplicación, y cuando la aplicación está en segundo plano ( applicationDidEnterBackground: kReachabilityChangedNotification .

La aplicación está diseñada para volver a cargar una transmisión de audio reproducida cuando nota que ha perdido una conexión Wi-Fi, por ejemplo, para probar, activé y desactivé el Wi-Fi en Configuración, y todo funcionó perfectamente. En las pruebas del mundo real, a menudo pierdo conectividad Wi-Fi cuando salgo del rango del punto de acceso. He descubierto que Alcachability no me está ayudando demasiado en este caso. No estoy seguro de si se debe a que las notificaciones de Accesibilidad no aparecen cuando la pantalla está bloqueada, o si la Accesibilidad no maneja la disminución lenta de la señal desde un punto de acceso Wi-Fi cada vez más distante, pero independientemente de lo que pueda entender por qué las pruebas del mundo real no coinciden con el caso idealizado.

Así es como se ve mi código. Primero me configuro para recibir notificaciones y empiezo a escuchar Reachability:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // check for internet connection [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; // Set up Reachability internetReachable = [[Reachability reachabilityForInternetConnection] retain]; [internetReachable startNotifier]; .... return YES; }

y luego, esta es la función que responde a los cambios en la conectividad:

- (void)checkNetworkStatus:(NSNotification *)notice { // called after network status changes NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; switch (internetStatus) { case NotReachable: { NSLog(@"The internet is down."); break; } case ReachableViaWiFi: { NSLog(@"The internet is working via WIFI"); break; } case ReachableViaWWAN: { NSLog(@"The internet is working via WWAN!"); break; } } }

Las notificaciones se reciben incluso cuando la aplicación está en segundo plano, pero no en las pruebas del mundo real descritas anteriormente.

Gracias por cualquier ayuda.


Estaba trabajando en una aplicación de VoIP, que se inicia en segundo plano cuando se inicia el iPhone, en cuyo punto puede no haber disponibilidad de red (por ejemplo, si el teléfono tiene una clave y / o una tarjeta SIM con un código PIN). Pero dado que la aplicación se inicia directamente en segundo plano, no se llama al método delegado applicationDidEnterBackground: En cambio, lo que hice fue utilizar la idea de @ Hurden directamente en la application:didFinishLaunchingWithOptions , verificando el estado de la applicationState para ver si la aplicación realmente se estaba iniciando en segundo plano. Esto permitió a mi aplicación obtener la notificación kReachabilityChangedNotification después de que el teléfono se desbloqueara (lo que permite que la conexión WiFi se conecte usando la contraseña almacenada).