Question

Comment puis-je détecter qu'une application vient de rentrer de « en arrière-plan »? Je veux dire, je ne veux pas que mon application pour récupérer les données (chaque 60 sec) lorsque la presse utilisateur le « bouton d'accueil ». Mais, je voudrais faire une « spéciale » mettre à jour la première fois l'application est en mode premier plan.

Comment puis-je détecter ces deux événements:

    app
  1. va en arrière-plan
  2. app
  3. passer en mode de premier plan

Merci à l'avance.

François

Était-ce utile?

La solution

Voici comment écouter ces événements:

// Register for notification when the app shuts down
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil];

// On iOS 4.0+ only, listen for background notification
if(&UIApplicationDidEnterBackgroundNotification != nil)
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil];
}

// On iOS 4.0+ only, listen for foreground notification
if(&UIApplicationWillEnterForegroundNotification != nil)
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil];
}

Note: Les contrôles de if(&SomeSymbol) assurez-vous que votre code fonctionne sur iOS 4.0+ et sur iOS 3.x - si vous construisez contre un 4.x iOS ou 5.x SDK et définissez la cible de déploiement pour iOS 3.x votre application peut encore fonctionner sur des appareils 3.x, mais l'adresse des symboles pertinents sera nul, et donc il ne tentera pas de demander des notifications qui n'existent pas sur les appareils 3.x (qui échouerait l'application).

Mise à jour: Dans ce cas, les contrôles if(&Symbol) sont maintenant redondants (à moins que vous vraiment nécessité de soutenir iOS 3 pour une raison quelconque). Cependant, il est utile de connaître cette technique pour vérifier si une API existe avant de l'utiliser. Je préfère cette technique que de tester la version du système d'exploitation, car vous vérifiez si l'API spécifique est présente plutôt que d'utiliser des connaissances en dehors de ce que les API sont présentes dans quelles versions OS.

Autres conseils

Si vous implémentez un UIApplicationDelegate, vous pouvez également brancher en fonctions dans le cadre du délégué:

- (void)applicationDidEnterBackground:(UIApplication *)application {
   /*
   Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
 If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
   */
    NSLog(@"Application moving to background");
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
  /*
   Called as part of the transition from the background to the active state: here you can undo many of the changes made on entering the background.
   */
    NSLog(@"Application going active");
}

Pour la référence du protocole voir http : //developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top