Как мешать MPMusicPlayerController включить экранную блокировку

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

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

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

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

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

9
задан tddmonkey 8 February 2010 в 13:33
поделиться

3 ответа

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

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

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

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

0
ответ дан 4 December 2019 в 23:39
поделиться

Я нашел решение этой проблемы. Вызов метода, который отключает 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");}
1
ответ дан 4 December 2019 в 23:39
поделиться

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

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

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

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

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

5
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: