Existe-t-il un moyen de vérifier si l'application iOS est en arrière-plan?


Réponses:


285

Le délégué d'application reçoit des rappels indiquant les transitions d'état. Vous pouvez le suivre en fonction de cela.

La propriété applicationState dans UIApplication renvoie également l'état actuel.

[[UIApplication sharedApplication] applicationState]

64
Merci - et pour plus de clarté, c'est [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson

39
Je pense que [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivec'est mieux, car UIApplicationStateInactive est presque équivalent à être en arrière-plan ...
JP Illanes


2
J'ai constaté que les rappels de transition ne sont pas appelés si votre application prend vie à des fins de récupération en arrière-plan.
Mike Asdf

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

Cela peut vous aider à résoudre votre problème.

Voir le commentaire ci-dessous - inactif est un cas assez particulier et peut signifier que l'application est en train d'être lancée au premier plan. Cela peut ou non signifier "contexte" pour vous en fonction de votre objectif ...


Bonne réponse utile. A travaillé
Saranjith

1
À partir de la documentation: UIApplicationStateInactive - L'application s'exécute au premier plan mais ne reçoit pas d'événements. Cela peut se produire à la suite d'une interruption ou parce que l'application effectue une transition vers ou depuis l'arrière-plan.
Andy Weinstein

30

Swift 3

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

l'inverse est-il également vrai? puis-je vérifier == .inactif || == .active pour voir s'il est au premier plan (par opposition à l'ouverture sur le fil d'arrière-plan)?
roberto tomás

21

Version Swift:

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

8

Si vous préférez recevoir des rappels au lieu de "poser des questions" sur l'état de l'application, utilisez ces deux méthodes dans votre AppDelegate:

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


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

1
Il est important de noter que applicationWillEnterForeground est appelée avant applicationDidBecomeActive. Par conséquent, vérifier applicationState à partir de applicationWillEnterForeground renverra UIApplicationStateBackground. Cela m'a un peu dérangé. J'ai donc utilisé une combinaison des solutions ci-dessus en vérifiant applicationState depuis applicationDidBecomeActive au lieu de vérifier (incorrectement) applicationState pour UIApplicationStateBackground à partir de applicationWillEnterForeground.
Justin Domnitz

1
J'ai eu cette même solution et elle convient aux cas où vous avez besoin des informations d'état sur un autre thread / file d'attente.
naz

4

rapide 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
    }

1
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
rollstuhlfahrer

à cause de l'absence de corps écrivez pour swift 4 aidant pour les 4 personnes rapides
Shakeel Ahmed

le code vous vérifiera si l'application en arrière-plan! Supposons que si vous recevez la notification en arrière-plan et que vous voulez faire des choses comme effectuer une action si la notification reçoit lorsque l'application en arrière-plan le code interne s'exécutera
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
        }

1

Une extension Swift 4.0 pour y accéder un peu plus facilement:

import UIKit

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

Pour accéder à partir de votre application:

let myAppIsInBackground = UIApplication.shared.isBackground

Si vous recherchez des informations sur les différents états ( active, inactiveet background), vous pouvez trouver la documentation Apple ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.