2009-05-22 15 views
5

Cette question semble être l'essence de plusieurs autres sur ce forum. Je crois qu'il est possible pour l'application iPhone active de continuer à fonctionner, et plus précisément de continuer à recevoir des rappels de minuterie, après qu'elle est entrée dans l'état inactif (soit par la minuterie inactive, soit par l'utilisateur appuyant sur le bouton de verrouillage du matériel).NSTimer callbacks lorsque l'application iPhone est inactive

La documentation dit expressément que, alors qu'une application est inactive, il est en cours d'exécution, mais pas la distribution des événements entrants (je ne donne pas un lien parce que je suis nerveux à NDA - dois-je détendre à ce sujet est tout ce poste une violation? soupir).

En outre, deux réponses par l'utilisateur "Ambr Str" indiquent directement qu'il est possible de continuer à recevoir des rappels de minuterie, et il fournit un code de code pour y parvenir (je ne peux pas lier à cela parce que je suis un nouvel utilisateur, désolé - recherchez la question: "Qu'arrive-t-il à une application iPhone lorsque l'iPhone passe en mode veille?" pour trouver sa réponse).

J'ai essayé de créer mes rappels comme il le suggère, mais une fois que mon application devient inactive, les rappels s'arrêtent. Je viens de remarquer que pendant que l'iPhone est branché, si l'application devient inactive (en raison d'un délai d'inactivité ou d'un appui sur le bouton de veille), les rappels continuent à se produire - peut-être devrais-je obtenir mes utilisateurs pour transporter une batterie avec eux ;-)

Répondre

2

Il y a une bonne réponse à cette question sur les forums d'Apple. Recherche de "Minuteur" et "Esquimau" (le gars utile qui fournit les réponses).

En résumé, peu après que l'application est devenue inactive, le téléphone se met réellement en veille. La seule façon d'éviter cela est de lire de l'audio (ou de lire de l'audio dans une application en arrière-plan). Pendant la lecture audio, le téléphone ne dort pas et votre application continue à fonctionner.

Il est suggéré que jouer audio reste éveillé est un hack, et que vous ne devriez pas le faire si possible. Je pense que dans mon application (qui effectue une lecture audio entrecoupée de périodes de silence), l'approche est valide, sinon idéale!

+1

UIApplication.idleTimerDisabled aide-t-il ou ne fonctionne-t-il pas lorsque l'utilisateur appuie manuellement sur le bouton de veille? –

+1

Comme vous le suggérez, UIApplication.idleTimerDisabled ne fonctionne pas si l'utilisateur appuie sur le bouton de veille, mais il y a plus que cela ... UIApplication.idleTimerDisabled est idéal si vous voulez empêcher votre application d'entrer dans l'état inactif quand le périphérique n'est pas interagi avec. C'est approprié pour un jeu. Dans mon cas, je veux spécifiquement que l'application devienne inactive (comme je veux réserver l'alimentation de l'appareil si possible). En outre, je souhaite autoriser l'utilisateur à verrouiller l'appareil afin que l'entrée ne soit pas reçue. –

+0

Une implémentation compatible avec iOS 5 est disponible sur https://github.com/mruegenberg/MMPDeepSleepPreventer – mrueg

0

J'ai une application. qui comprend un serveur Web intégré. Je prévois d'offrir une option de désactivation automatique IFF le serveur est allumé, et l'appareil est sous tension. Vous pouvez donc envisager de vérifier la propriété batteryState de UIDevice. Donc, si batteryState! = UIDeviceBatteryStateUnplugged, allez-y et désactivez la minuterie d'inactivité. (Remarque: les docs indiquent que UIDeviceBatteryStateUnknown sera renvoyé en simulateur.)

Vous devez également écouter les notifications UIDeviceBatteryStateUnplugged et définir batteryMonitoringEnabled de manière appropriée.