Проблема обработки поведения AVAudioPlayer
Я пытался учиться AVAudioPlayer
и это поведение.
Итак, для начала я написал
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1;
[player play];
Это работало хорошо, пока приложение не входило в фон. Поэтому я снова искал и обнаружил, что мне нужно добавить запись в plist, а также написал следующий код
NSError *activationError = nil;
if([[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&activationError] == NO)
NSLog(@"*** %@ ***", activationError);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
Теперь мое приложение-пример воспроизводит звук в фоновом режиме. Тогда я столкнулся с другой проблемой. Если я поместил режим сна перед всей этой обработкой, возьму мое приложение в фоновом режиме во время сна и начну воспроизводить музыку из какого-либо другого приложения, в этом случае мое приложение не сможет воспроизводить звук. Вероятно, потому, что он не получает аудиосессию, которую выполняло какое-то другое музыкальное приложение.
Вопросы 1. Я понимаю, что есть способ определить, воспроизводится ли какой-либо другой звук, но я не смог найти, как мне его остановить. Существуют методы для остановки звука стандартного приложения, такого как iPod, но есть ли какой-либо общий метод, чтобы остановить звук из любого другого приложения. 2. [player play];
дает NO
как результат, который является неудачей. Как мне найти, что вызвало сбой. Я реализовал audioPlayerDecodeErrorDidOccur:error:
метод, но он никогда не вызывается.
Пожалуйста, поделитесь своими знаниями по этому вопросу. Я уже рассмотрел большинство вопросов о переполнении стека относительно того же самого, но не нашел ничего полезного для этой конкретной проблемы.
1 ответ
-(void)loadPlayer
{
NSURL *audioFileLocationURL = [NSURL URLWithString:[[NSBundle mainBundle] URLForResource:@"01-YedhiYedhi[www.AtoZmp3.in]" withExtension:@"mp3"]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL error:&error];
[audioPlayer setNumberOfLoops:-1];
if (error)
{
NSLog(@"%@", [error localizedDescription]);
[[self volumeControl] setEnabled:NO];
[[self playPauseButton] setEnabled:NO];
[[self alertLabel] setText:@"Unable to load file"];
[[self alertLabel] setHidden:NO];
}
else
{
[[self alertLabel] setText:[NSString stringWithFormat:@"%@ has loaded", str]];
[[self alertLabel] setHidden:NO];
//Make sure the system follows our playback status
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
//Load the audio into memory
[audioPlayer prepareToPlay];
}
}
if (!self.audioPlayer.playing) {
[self playAudio];
} else if (self.audioPlayer.playing) {
[self pauseAudio];
}
}
- (void)playAudio {
[audioPlayer play];
}