2009-11-26 14 views
3

Je souhaite que mon application continue de fonctionner et interagisse avec l'utilisateur, même si l'utilisateur appuie sur le bouton de veille.
Jusqu'à présent, j'ai appris que mon application peut rester en vie avec le code suivant:Interaction avec IPhone en mode veille

NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

Cela réussit. La méthode
- (void)timerFireMethod:(NSTimer*)theTimer
sera appelée toutes les 0.5s même si je suis en mode veille. Donc, sachez que mon problème est: Comment puis-je interagir avec mon application en mode veille? J'ai simplement besoin d'un déclencheur pour commencer à lire un fichier audio personnalisé. Par conséquent, je besoin d'un événement déclencheur, quelque chose comme la détection:
-a toucher à l'écran
activité d'accélération -an
-a MotionShake événement

Mais après avoir reçu le applicationWillResignActive -Event, rien de ce qui précède est de travailler . Mon accéléromètre arrête la livraison des événements d'accélération. Et je suis incapable de les relancer. MotionShake L'événement ne sera pas délivré et je ne sais pas, s'il est possible d'attraper un événement tactile pendant le sommeil.

Mise à jour
Je me attends à l'utilisateur d'utiliser mon application pour permet de dire 5 heures. S'il est inactif pendant un certain temps, il s'endort tout seul. J'ai probablement mal interprété ce que je veux dire avec le mode veille. L'Iphone devrait être opérationnel tout le temps, mais je n'ai pas besoin de l'affichage et de la lumière d'arrière-plan allumée tout le temps (ce sont les pièces les plus énergivores). Je sais que tout en jouant un son silencieux toutes les 10 secondes, l'iphone ne va pas dormir. Et je sais que l'application IPod est capable de fonctionner dans ce mode et l'utilisateur peut interagir avec lui en secouant l'appareil. Donc, n'y a-t-il pas un moyen officiel pour qu'une application fasse de même?
---

Quelqu'un a-t-il une idée?

Merci Zensursula

Répondre

3

Une fois applicationWillResignActive est appelée sur votre application, vous arrêtez simplement la réception d'événements:

Le délégué peut mettre en œuvre cette méthode pour faire des ajustements lorsque les transitions d'application d'un état actif à un état inactif. Lorsqu'une application est inactive, il est en cours d'exécution mais n'effectue pas l'envoi événements entrants. Cela se produit lorsqu'une fenêtre de superposition apparaît ou lorsque le périphérique est verrouillé.

Le mode veille consiste à économiser de l'énergie. Pour ce faire, l'appareil arrête d'écouter des événements comme ceux que vous demandez.

Les événements NSTimer continueront à se déclencher, car ils ne nécessitent pas de surveillance matérielle coûteuse (au niveau des batteries). De plus, les alarmes sont implémentées à l'aide de NSTimer, elles doivent donc pouvoir fonctionner même en mode veille. Sinon, les gens pourraient ne pas se réveiller et blâmer leur iPhone.

+0

Merci pour l'explication de ce qui se passe. J'ai mis à jour ma question pour expliquer plus en détail ce que je veux. Peut être qu'il y a une autre soultion pour mon problème. – Zensursula