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

186

Ich möchte überprüfen, ob die App im Hintergrund ausgeführt wird.

Im:

locationManagerDidUpdateLocation {
    if(app is runing in background){
        do this
    }
}
Bobby Grenier
quelle
Sprechen Sie über die locationManager:didUpdateToLocation:fromLocation:Methode?
Schwarzer Frosch

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]
DavidN
quelle
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
6
Die Staaten sind hier aufgeführt: developer.apple.com/library/ios/documentation/uikit/reference/…
Dan Rosenstark
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 ...

Aswathy Bose
quelle
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")
    }
Treffen
quelle
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")
}
ioopl
quelle
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");
}
klimat
quelle
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
    }
Shakeel Ahmed
quelle
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
        }
Raj Kumar
quelle
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 .

CodeBender
quelle