Esiste un modo per verificare se l'app iOS è in background?


Risposte:


285

Il delegato dell'app riceve i callback che indicano le transizioni di stato. Puoi seguirlo in base a quello.

Anche la proprietà applicationState in UIApplication restituisce lo stato corrente.

[[UIApplication sharedApplication] applicationState]

64
Grazie - e per maggiore chiarezza è [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground.
podperson,

39
Penso che [[UIApplication sharedApplication] applicationState] != UIApplicationStateActivesia meglio, dato che UIApplicationStateInactive è quasi equivalente a essere in background ...
JP Illanes,


2
Ho scoperto che i callback di transizione non vengono chiamati se l'app viene attivata per scopi di recupero in background.
Mike Asdf,

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

Questo può aiutarti a risolvere il tuo problema.

Vedi il commento qui sotto: inattivo è un caso abbastanza speciale e può significare che l'app è in fase di avvio in primo piano. Ciò può o meno significare "sfondo" per te a seconda del tuo obiettivo ...


Risposta utile e utile. Ha funzionato
Saranjith il

1
Dai documenti: UIApplicationStateInactive: l'app è in esecuzione in primo piano ma non sta ricevendo eventi. Ciò può accadere a seguito di un'interruzione o perché l'app sta passando da o verso lo sfondo.
Andy Weinstein,

30

Swift 3

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

è vero anche il contrario? posso controllare == .inattivo || == .attivo per vedere se è in primo piano (invece di aprirsi sul thread di sfondo)?
roberto tomás,

21

Versione rapida:

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

8

Se si preferisce ricevere callback anziché "chiedere" sullo stato dell'applicazione, utilizzare questi due metodi nel proprio AppDelegate:

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


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

1
È importante notare che applicationWillEnterForeground viene chiamato prima dell'applicazione applicationDidBecomeActive. Pertanto, il controllo di applicationState dall'interno di applicationWillEnterForeground restituirà UIApplicationStateBackground. Questo mi ha gettato per un po '. Quindi, ho usato una combinazione delle soluzioni di cui sopra controllando applicationState dall'interno di applicationDidBecomeActive anziché (erroneamente) controllando applicationState per UIApplicationStateBackground dall'interno di applicationWillEnterForeground.
Justin Domnitz,

1
Ho avuto questa stessa soluzione ed è adatto per i casi in cui sono necessarie le informazioni sullo stato su un altro thread / coda.
naz,

4

veloce 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
Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
rollstuhlfahrer

perché nessun corpo scrive per swift 4 aiutando per i rapidi 4 popoli
Shakeel Ahmed

il codice ti verificherà se l'app in background! Supponiamo che tu stia ricevendo la notifica in background e vuoi fare alcune cose come eseguire alcune azioni se la notifica riceve quando l'app in background verrà eseguita dal codice 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
        }

1

Un'estensione di Swift 4.0 per semplificare l'accesso:

import UIKit

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

Per accedere dall'interno della tua app:

let myAppIsInBackground = UIApplication.shared.isBackground

Se stai cercando informazioni sui vari stati ( active, inactivee background), puoi trovare la documentazione di Apple qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.