web-dev-qa-db-fra.com

Détecter l'application iOS en entrant en arrière-plan

Je travaille sur un jeu pour iOS codé en Swift. J'ai essayé de trouver un moyen de détecter le moment où l'application passe en mode arrière-plan ou est interrompue pour d'autres raisons, par exemple un appel téléphonique, mais ne trouve rien. Comment fait-on ça?

14
Johannes Flood

modifier/mettre à jour: Xcode 10 • Swift 4.2

Vous pouvez ajouter un observateur à votre contrôleur de vue pour UIApplication.willResignActiveNotification

NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification, object: nil)

et ajoutez une méthode de sélecteur à votre contrôleur de vue qui sera exécutée lorsque votre application recevra cette notification:

@objc func willResignActive(_ notification: Notification) {
    // code to execute
}
36
Leo Dabus

Swift3

let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)


func appMovedToBackground() {
    print("App moved to background!")
}
7
dimo hamdy

Pour détecter l'application entre en arrière-plan, vous pouvez vérifier dans appDelegate.m Trouver la méthode de délégation de l'application. 

applicationDidEnterBackground

Cette méthode sera appelée une fois l'application en arrière-plan.

5

Examinez les méthodes de délégation définies dans votre instance de UIApplicationDeletegate (appelée AppDelegate.m par défaut). Les éléments suivants seraient utiles:

- (void)applicationWillResignActive:(UIApplication *)application

Cette méthode est appelée pour indiquer à votre application qu'elle est sur le point de passer de l'état actif à l'état inactif. Cela peut se produire pour certains types d'interruptions temporaires (comme un appel téléphonique entrant ou un message SMS) ou lorsque l'utilisateur quitte l'application et commence à passer à l'état d'arrière-plan. Une application à l'état inactif continue de s'exécuter, mais ne distribue pas les événements entrants aux répondeurs.

Tiré de la documentation Apple - ici

1
Alex Blundell

Dans Swift 4 et iOS 12: Pour observer l'application entre background event, ajoutez ce code à votre méthode viewDidLoad () .

    let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

    @objc func appMovedToBackground() {
        // do whatever event you want
    }

vous devez utiliser UIApplication.didEnterBackgroundNotification . Si vous souhaitez savoir si l'application est arrivée sur foreground event, utilisez UIApplication.willEnterForegroundNotification  

Donc, le code complet sera:

override func viewDidLoad() {
    super.viewDidLoad()

    let notificationCenter = NotificationCenter.default
    notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

    notificationCenter.addObserver(self, selector: #selector(appCameToForeground), name: UIApplication.willEnterForegroundNotification, object: nil)

    // Do any additional setup after loading the view.
}
 @objc func appMovedToBackground() {
    print("app enters background")
}

@objc func appCameToForeground() {
    print("app enters foreground")
}
0
mumu