AVPlayer и addPeriodicTimeObserverForInterval не работают, когда приложение переходит в фоновый режим

Вопрос 1. Я наблюдаю следующее поведение на iphone 4 и iOS 5.0.1.

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

  • работает хорошо, пока приложение не перейдет в фоновый режим. Например, нажмите кнопку "Домой" или заблокируйте экран,

  • Когда приложение возвращается на передний план, проигрыватель снова начинает воспроизведение, но обновления больше не запускаются. Если пользователь снова нажимает кнопку паузы воспроизведения, обновления пользовательского интерфейса запускаются снова. Это можно увидеть в демонстрационное приложение от Apple.

вопрос 2

Можем ли мы не смешивать API аудиосессии на основе C с базовыми классами AV? Например, Мой слушатель на основе C зарегистрирован, когда AudioInterruptions. Но когда я использую AVPlayer с kAudioSessionCategory_PlayAndRecord, они не вызываются. Когда приложение переходит в фоновый режим, AVPlayer приостанавливается без вызова слушателя на основе C.

Ожидается ли это или я могу что-то сделать? Обратите внимание, что как только я удалил экземпляр AVPlayer и мое приложение снова перешло в фоновый режим с kAudioSessionCategory_PlayAndRecord, установленным в качестве категории, вызывается функция прослушивателя.


person xmlsingh    schedule 26.02.2012    source источник
comment
Вы зарегистрировались для получения удаленных уведомлений о событиях и установили для фонового режима значение «Приложение воспроизводит звук»? (Вам также необходимо установить контроллер представления в качестве первого респондента)   -  person sooper    schedule 27.02.2012
comment
Спасибо, Супер. Но вы не ответили ни на один из моих вопросов :(. Я не хочу, чтобы мое приложение работало в фоновом режиме и влияло на его поведение, которое я хочу.   -  person xmlsingh    schedule 28.02.2012


Ответы (1)


Для вашей первой проблемы, скорее всего, вы не выпускаете addPeriodicTimeObserverForInterval, как было предложено. Попробуйте ввести что-то вроде этого в свой AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [_audioManager.audioPlayer removeTimeObserver:_audioManager.timeObserver];
    _audioManager.isUIActive = NO;
}

и соответствующий метод перезапуска периодического наблюдателя времени:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [_audioManager setUpTransportUI];
    _audioManager.isUIActive = YES;
}

где setUpTransportUI воссоздает ваш наблюдатель времени.

person deleterOfWorlds    schedule 01.03.2012