Взаимодействие с IPhone в спящем режиме - PullRequest
3 голосов
/ 26 ноября 2009

Я хочу, чтобы мое приложение продолжало работать и взаимодействовать с пользователем, даже если пользователь нажимает кнопку спящего режима.
До сих пор я узнал, что мое приложение может остаться в живых с помощью следующего кода:

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

Это успешно. Метод
- (void)timerFireMethod:(NSTimer*)theTimer<br> будет вызываться каждые 0,5 с, даже если я нахожусь в спящем режиме.

Итак, знайте, что моя проблема: Как я могу взаимодействовать с моим приложением в спящем режиме? Мне просто нужен триггер, чтобы начать воспроизведение собственного аудиофайла. Поэтому мне нужно событие триггера, что-то вроде обнаружения:
-сенсорный на дисплее
- ускорение активности
- событие MotionShake

Но после получения события applicationWillResignActive ничего из вышеперечисленного не работает. Мой акселерометр останавливает доставку событий ускорения. И я не могу начать их снова. Событие MotionShake не будет доставлено, и я не знаю, возможно ли перехватить сенсорное событие во время сна.

Обновление
Я ожидаю, что пользователь будет использовать мое приложение, скажем, 5 часов. Если какое-то время он простаивает, он сам уснет. Я, вероятно, неправильно понял, что я имею в виду в режиме сна. Iphone должен быть включен и работать постоянно, но мне не нужно, чтобы дисплей и фоновая подсветка были включены постоянно (это наиболее энергоемкие компоненты). Я знаю, что при воспроизведении бесшумного звука каждые 10 секунд, iphone не собирается спать. И я знаю, что приложение IPod может работать в этом режиме, и пользователь может взаимодействовать с ним, встряхивая устройство. Так не существует ли официального способа для приложения сделать то же самое?
---

У кого-нибудь есть идеи?

Спасибо, Зенсурсула

1 Ответ

3 голосов
/ 26 ноября 2009

Как только applicationWillResignActive будет вызвано в вашем приложении, вы просто прекращаете получать события:

Делегат может реализовать этот метод внести коррективы, когда приложение переходит из активного состояние в неактивное состояние. Когда приложение неактивно, оно выполняет, но не отправляет входящие события. Это происходит, когда всплывающее окно появляется или когда устройство заблокировано.

Смысл режима сна - экономия энергии. Для этого устройство прекращает прослушивать события, подобные тем, которые вы запрашиваете.

События NSTimer будут по-прежнему срабатывать, поскольку они не требуют дорогого (с батарейным питанием) аппаратного мониторинга. Кроме того, сигналы тревоги реализованы с использованием NSTimer, поэтому они должны иметь возможность функционировать даже во время сна. В противном случае люди могут не проснуться и обвинить свой iPhone.

...