¿Hay alguna forma de verificar si la aplicación de iOS está en segundo plano?

Respuestas:

285

El delegado de la aplicación recibe devoluciones de llamada que indican transiciones de estado. Puedes rastrearlo en base a eso.

Además, la propiedad applicationState en UIApplication devuelve el estado actual.

[[UIApplication sharedApplication] applicationState]
DavidN
fuente
64
Gracias, y para mayor claridad es [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson
39
Creo que [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivees mejor, ya que UIApplicationStateInactive es casi equivalente a estar en segundo plano ...
JP Illanes
66
Los estados se detallan aquí: developer.apple.com/library/ios/documentation/uikit/reference/…
Dan Rosenstark
2
Descubrí que las devoluciones de llamada de transición no se llaman si su aplicación cobra vida para fines de búsqueda de fondo.
Mike Asdf
176
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (state == UIApplicationStateBackground || state == UIApplicationStateInactive)
{
   //Do checking here.
}

Esto puede ayudarlo a resolver su problema.

Vea el comentario a continuación: inactivo es un caso bastante especial y puede significar que la aplicación está en proceso de iniciarse en primer plano. Eso puede o no significar "antecedentes" para usted dependiendo de su objetivo ...

Bose ceniciento
fuente
Buena respuesta útil. Trabajado
Saranjith
1
De los documentos: UIApplicationStateInactive: la aplicación se ejecuta en primer plano pero no recibe eventos. Esto puede suceder como resultado de una interrupción o porque la aplicación está en transición hacia o desde el fondo.
Andy Weinstein
30

Swift 3

    let state = UIApplication.shared.applicationState
    if state == .background {
        print("App in Background")
    }
Reunirse
fuente
¿Es lo contrario también cierto? puedo verificar == .inactive || == .active para ver si está en primer plano (en lugar de abrir en el hilo de fondo)?
roberto tomás
21

Versión rápida:

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

Si prefiere recibir devoluciones de llamada en lugar de "preguntar" sobre el estado de la aplicación, use 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");
}
klimat
fuente
1
Es importante tener en cuenta que se llama a applicationWillEnterForeground antes de applicationDidBecomeActive. Por lo tanto, al verificar applicationState desde applicationWillEnterForeground, se devolverá UIApplicationStateBackground. Esto me echó por un momento. Entonces, utilicé una combinación de las soluciones anteriores al verificar applicationState desde applicationDidBecomeActive en lugar de (incorrectamente) verificar applicationState para UIApplicationStateBackground desde applicationWillEnterForeground.
Justin Domnitz
1
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
4

rápido 5

let state = UIApplication.shared.applicationState
    if state == .background {
        print("App in Background")
        //MARK: - if you want to perform come action when app in background this will execute 
        //Handel you code here
    }
    else if state == .foreground{
        //MARK: - if you want to perform come action when app in foreground this will execute 
        //Handel you code here
    }
Shakeel Ahmed
fuente
1
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo.
rollstuhlfahrer
debido a que ningún cuerpo escribe para swift 4 ayudando a los veloces 4 pueblos
Shakeel Ahmed
¡el código verificará su estado si la aplicación está en segundo plano! Suponga que si está recibiendo la notificación en segundo plano y desea hacer algunas cosas, como realizar alguna acción si recibe una notificación cuando la aplicación en segundo plano se ejecutará el código interno
Shakeel Ahmed
3

Swift 4+

let appstate = UIApplication.shared.applicationState
        switch appstate {
        case .active:
            print("the app is in active state")
        case .background:
            print("the app is in background state")
        case .inactive:
            print("the app is in inactive state")
        default:
            print("the default state")
            break
        }
Raj Kumar
fuente
1

Una extensión Swift 4.0 para facilitar el acceso a ella:

import UIKit

extension UIApplication {
    var isBackground: Bool {
        return UIApplication.shared.applicationState == .background
    }
}

Para acceder desde su aplicación:

let myAppIsInBackground = UIApplication.shared.isBackground

Si está buscando información sobre los diferentes estados ( active, inactivey background), se puede encontrar la documentación de Apple aquí .

CodeBender
fuente