2011-04-29 21 views

Respuesta

257

App delegado obtiene devoluciones de llamada que indican las transiciones de estado. Puedes rastrearlo en base a eso.

También la propiedad applicationState en UIApplication devuelve el estado actual.

[[UIApplication sharedApplication] applicationState] 
+60

Gracias, y para mayor claridad, es [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground. – podperson

+37

Creo que '[[UIApplication sharedApplication] applicationState]! = UIApplicationStateActive' es mejor, ya que UIApplicationStateInactive es casi equivalente a estar en segundo plano ... – Raspu

+6

Los estados se detallan aquí: https://developer.apple.com/library /ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIApplicationState –

163
UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive) 
{ 
    //Do checking here. 
} 

Esto le puede ayudar a resolver su problema.

Ver el comentario a continuación: inactivo es un caso bastante especial, y puede significar que la aplicación está en el proceso de ser lanzada al primer plano. Que puede o no puede significar "fondo" para usted en función de su objetivo ...

+0

Respuesta agradable, útil. Funcionó – Saranjith

+0

De los documentos: UIApplicationStateInactive: la aplicación se ejecuta en primer plano, pero no está recibiendo eventos. Esto puede suceder como resultado de una interrupción o porque la aplicación está en transición hacia o desde el fondo. –

8

Si prefiere recibir devoluciones de llamada en lugar de "preguntar" sobre el estado de la aplicación, utilizar estos dos métodos en su AppDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSLog(@"app is actvie now"); 
} 


- (void)applicationWillResignActive:(UIApplication *)application { 
    NSLog(@"app is not actvie now"); 
} 
+0

Es importante tener en cuenta que se llama a applicationWillEnterForeground antes de applicationDidBecomeActive. Por lo tanto, al marcar applicationState desde applicationWillEnterForeground se devolverá UIApplicationStateBackground. Esto me sorprendió un poco. Por lo tanto, utilicé una combinación de las soluciones anteriores marcando applicationState desde applicationDidBecomeActive en lugar de verificar (incorrectamente) applicationState para UIApplicationStateBackground desde applicationWillEnterForeground. –

+0

Tenía esta misma solución y es adecuada para casos en los que necesita la información de estado en otro hilo/cola. – naz

15

versión Swift:

let state = UIApplication.sharedApplication().applicationState 
      if state == .Background { 
       print("App in Background") 
      } 
14

Swift 3

let state = UIApplication.shared.applicationState 
    if state == .background { 
     print("App in Background") 
    } 
Cuestiones relacionadas