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]
DavidN
la source
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
6
Les états sont précisés ici: developer.apple.com/library/ios/documentation/uikit/reference/…
Dan Rosenstark
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 ...

Aswathy Bose
la source
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")
    }
Rencontrer
la source
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")
}
ioopl
la source
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");
}
Klimat
la source
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
    }
Shakeel Ahmed
la source
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
        }
Raj Kumar
la source
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 .

CodeBender
la source