Обработка прерываний для нескольких AVAudioPlayers - PullRequest
0 голосов
/ 08 июля 2010

Можно ли обрабатывать прерывание делегатом AVPLayer, когда у меня более одного AVPlayer?Я попробовал несколько вещей, чтобы снова запустить два AVPlayer после телефонного звонка, но все равно только один ответ и запуск, второй был приостановлен и ничего не сделал.

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Я уверен, что вы уже решили это, но все равно хотели записать мой ответ.Я только что проверил это на IPhone (4.3.2), мое приложение воспроизводит два разных звука с двумя разными AVAudioPlayers.При получении телефонного звонка я получаю прерывание для каждого игрока, для обоих методов прерывания:

- (void)audioPlayerBeginInterruption:(AVAudioPlayer *) player;
- (void)audioPlayerEndInterruption:(AVAudioPlayer *) player;

Таким образом, вы можете легко перезапустить обоих игроков:

- (void) audioPlayerEndInterruption:(AVAudioPlayer *) player {
  NSLog (@"Interruption ended. Resuming audio playback.");
  [player prepareToPlay];
  [player play];
}
0 голосов
/ 08 июля 2010

Я предполагаю, что вам нужно сохранить массив ваших players, чтобы вы могли опрашивать их и приостанавливать / запускать каждый из них. Вы можете добавить каждый из них в массив при создании проигрывателя, к которому вы можете получить доступ в audioPlayerBeginInterruption: и audioPlayerEndInterruption:

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

AVAudioPlayer *player; 
for (player in players) {

    [player pause];
    //or [player play];
}

http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerDelegateProtocolReference/Reference/Reference.html#//apple_ref/occ/intfm/AVAudioPlayerDelegate/audioPlayerBeginInterruption:

...