Gibt es eine Möglichkeit zu überprüfen, ob sich die iOS-App im Hintergrund befindet?


Antworten:


285

Der App-Delegat erhält Rückrufe, die Statusübergänge anzeigen. Sie können es basierend darauf verfolgen.

Auch die Eigenschaft applicationState in UIApplication gibt den aktuellen Status zurück.

[[UIApplication sharedApplication] applicationState]

64
Vielen Dank - und für zusätzliche Klarheit ist es [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
Podperson

39
Ich denke, es [[UIApplication sharedApplication] applicationState] != UIApplicationStateActiveist besser, da UIApplicationStateInactive fast gleichbedeutend mit Hintergrund ist ...
JP Illanes


2
Ich habe festgestellt, dass die Übergangsrückrufe nicht aufgerufen werden, wenn Ihre App für Hintergrundabrufzwecke zum Leben erweckt wird.
Mike Asdf

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

Dies kann Ihnen bei der Lösung Ihres Problems helfen.

Siehe Kommentar unten - Inaktiv ist ein ziemlich spezieller Fall und kann bedeuten, dass die App gerade in den Vordergrund gestellt wird. Das kann für Sie "Hintergrund" bedeuten oder auch nicht, abhängig von Ihrem Ziel ...


Schöne, hilfreiche Antwort. Arbeitete
Saranjith

1
Aus den Dokumenten: UIApplicationStateInactive - Die App wird im Vordergrund ausgeführt, empfängt jedoch keine Ereignisse. Dies kann auf eine Unterbrechung zurückzuführen sein oder darauf, dass die App in den Hintergrund oder aus dem Hintergrund wechselt.
Andy Weinstein

30

Swift 3

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

ist das Gegenteil auch wahr? kann ich == .inactive || überprüfen == .aktiv, um zu sehen, ob es im Vordergrund ist (im Gegensatz zum Öffnen im Hintergrund-Thread)?
Roberto Tomás

21

Schnelle Version:

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

8

Wenn Sie Rückrufe erhalten möchten, anstatt nach dem Anwendungsstatus zu fragen, verwenden Sie diese beiden Methoden in Ihrem AppDelegate:

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


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

1
Es ist wichtig zu beachten, dass applicationWillEnterForeground vor applicationDidBecomeActive aufgerufen wird. Wenn Sie applicationState in applicationWillEnterForeground überprüfen, wird UIApplicationStateBackground zurückgegeben. Das warf mich ein bisschen ab. Daher habe ich eine Kombination der oben genannten Lösungen verwendet, indem ich applicationState in applicationDidBecomeActive überprüft habe, anstatt applicationState (fälschlicherweise) in applicationWillEnterForeground auf UIApplicationStateBackground zu überprüfen.
Justin Domnitz

Ich hatte dieselbe Lösung und sie eignet sich für Fälle, in denen Sie die Statusinformationen für einen anderen Thread / eine andere Warteschlange benötigen.
Naz

4

schnell 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
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Rollstuhlfahrer

weil kein Körper für schnelle 4 schreiben, die für die schnellen 4 Völker helfen
Shakeel Ahmed

Der Code prüft, ob sich die App im Hintergrund befindet! Angenommen, Sie erhalten die Benachrichtigung im Hintergrund und möchten einige Aktionen ausführen, z. B. eine Aktion ausführen, wenn eine Benachrichtigung empfangen wird, wenn die App im Hintergrund den inneren Code ausführt
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

Eine Swift 4.0-Erweiterung, die den Zugriff etwas erleichtert:

import UIKit

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

So greifen Sie über Ihre App zu:

let myAppIsInBackground = UIApplication.shared.isBackground

Wenn Sie Informationen zu den verschiedenen Staaten suchen ( active, inactiveund background), können Sie das finden Apple - Dokumentation hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.