Как остановить MPMusicPlayerController от включения блокировки экрана - PullRequest
9 голосов
/ 08 февраля 2010

У меня есть приложение, для которого экран iPhone должен оставаться активным (или нет, в зависимости от выбора пользователя). Я сделал это, отключив таймер простоя приложения, который прекрасно работает и работает до тех пор, пока я не начну проигрывать мультимедиа через MPMusicPlayerController. Из-за ошибки в SDK это затем включает таймер простоя без видимого способа снова его отключить.

Мой поток приложений:

  1. Приложение запускается
  2. Экран остается включенным
  3. <... проходит время ...>
  4. Воспроизведение аудиофайла
  5. Таймер простоя срабатывает
  6. Экран выключается

У меня есть пустой аудиофайл, который воспроизводится в фоновом режиме, чтобы телефон не погрузился в глубокий сон, но мне бы очень хотелось, чтобы экран был разблокирован.

Кому-нибудь удалось найти обходной путь для этого?

Ответы [ 3 ]

5 голосов
/ 26 июля 2010

У меня была похожая проблема, и я нашел решение для нее. Исправление может работать и для вас:

Я периодически вызываю метод (каждые 10 секунд), который устанавливает для idleTimerDisabled сначала значение NO, а затем значение YES.

- (void)calledEveryTenSeconds
{
    [UIApplication sharedApplication].idleTimerDisabled = NO;
    [UIApplication sharedApplication].idleTimerDisabled = YES;
}

Только установка YES не решает проблему. Похоже, что свойство должно быть изменено в первую очередь для распознавания UIApplication.

Моя проблема заключалась в том, что экран продолжал темнеть, как только я переключал музыкальные треки на плеере iPod через пульт наушников. Я думаю, что это та же проблема, что и вы.

1 голос
/ 11 июня 2010

Я нашел решение этой проблемы. Вызовите метод, который отключает idleTimer примерно через 5 секунд после начала воспроизведения музыки. Это что-то вроде хака, но это обходной путь.

[[SoundEngine mainEngine] playMusic];

[self performSelector:@selector(setIdleTimeDisabled) withObject:nil afterDelay:5.0];

- (void) setIdleTimeDisabled {
[UIApplication sharedApplication].idleTimerDisabled = YES;
NSLog(@"Setting idleTimer to TRUE");}
0 голосов
/ 08 февраля 2010

Вы должны просто отключить таймер простоя. То, что я обычно делаю в viewcontroller, который должен оставаться «бодрствующим», это:

- (void) viewWillAppear:(BOOL)animated
{
    [[UIApplication sharedApplication] setIdleTimerDisabled: YES];
}

- (void) viewWillDisappear: (BOOL) animated
{
    [[UIApplication sharedApplication] setIdleTimerDisabled: NO];
}

Это обеспечит блокировку экрана из-за неактивности пользователя.

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