2010-02-08 6 views
9

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

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

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

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

Неужели кому-то удалось выяснить обходное решение для этого?

+0

Вы установили 'idleTimerDisabled' в' YES'? – kennytm

+0

Да. IdleTimerDisabled сбрасывается на NO, когда MPMusicPlayerController срабатывает, и вы не можете его отключить. – tddmonkey

+0

Удачи с этой проблемой? Пробовал все решения, но никто из них не работал. –

ответ

0

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

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

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

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

+0

St3fan, я сделал это при запуске приложения, подтвержденный тем фактом, что телефон не спит до тех пор, пока музыка не начнет играть. Как я уже сказал, как только активируется MPMusicPlayerController, он снова запускает таймер простоя, и вы не можете его отключить – tddmonkey

1

Я нашел решение этой проблемы. Вызов метода, который отключает 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");} 
5

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

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

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

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

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

+0

henning77, спасибо за это! Мне удалось заставить его работать в моем новом приложении, используя ваш метод. Многие люди неправильно поняли вопрос/проблему как обычный способ отключения idletimer. Но речь идет о ПОСЛЕ ИГРЫ MPMUSICPLAYER. IdleTimerDisabled = НЕТ; действительно критично. Это не будет работать без него. – GeneCode

Смежные вопросы