Как остановить и возобновить фоновый звук из приложения iPhone?
Я работаю в приложении для iPhone на основе сообщений. Я добавил звуковой сигнал, чтобы получать сообщения от кого-то еще. Я играю звуковой сигнал, используя AVAudioPlayer
, Моя проблема заключается в том, что когда пользователь слышит песню из других приложений в фоновом режиме, если он получает сообщение от моего приложения, будет воспроизводиться звуковой сигнал, и фоновая песня / звук перестает возобновляться.
Я хочу воспроизвести свой звуковой сигнал, приостановив фоновую песню / аудио, и снова мне нужно возобновить этот звук / песню из моего приложения. Это возможно в iOS разработке? Кто-нибудь может мне помочь, пожалуйста!
Редакция:
Это мой пример кода.
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Music";
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"basicsound" ofType:@"wav"];
NSURL *audioURL = [[NSURL alloc] initWithString:urlString];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
[audioPlayer setDelegate:self];
[audioPlayer prepareToPlay];
audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:YES error:&error];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
[audioPlayer play];
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if (flag == YES)
{
NSLog(@"Audio Played successfully");
NSError *error;
[audioSession setActive:NO error:&error];
}
}
2 ответа
Вы не можете сделать это для всех приложений. Для приложений, которые используют плеер iPod в своих приложениях:
Предполагая, что ваше приложение находится на переднем плане. Вы можете сделать это:
MPMusicPlayerController *mp = [MPMusicPlayerController iPodMusicPlayer];
[mp stop]; // or [mp pause]
Это нужно MediaPlayer.framework
а также #import <MediaPlayer/MediaPlayer.h>
,
Читайте больше в Справочнике MPMusicPlayerController.
Для этого через Audio Player Sessions вы можете использовать свойство kAudioSessionCategory_SoloAmbientSound
, Ссылка здесь.
Это похоже на AVAudioSessionCategorySoloAmbient
определено в классе AVAudioSession.
Цитирование из документации:
Когда вы используете эту категорию, звук из других приложений отключается.
Немного опоздал на вечеринку, но для тех, кто ищет решение проблемы приостановки и приостановки фона (например, музыки в формате ipod) после воспроизведения звуков, вы должны использовать следующее при деактивации аудиосессии.
[[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
// Новый метод, который не считается устаревшим:
[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
Всякий раз, когда вам не требуется аудиосеанс в вашем приложении (то есть, когда вы не выводите звук), вы должны деактивировать его. Там, где это имеет смысл, вы должны использовать этот метод, чтобы любой фоновый звук уведомлялся и мог возобновиться (приложения, получающие это уведомление, не обязательно должны возобновляться).
Кроме того, вы должны использовать соответствующую категорию аудио, чтобы ваш звук воспроизводился исключительно там, где это необходимо. Это может быть сделано с любой из категорий, кроме AVAudioSessionCategoryAmbient
, Это автоматически приостановит фоновое аудио для вас, когда ваш аудио сеанс станет активным. Однако он не будет повторно активировать фоновое аудио, что делается с помощью приведенного выше кода. В этом случае, как указывалось ранее, фоновое аудио затем решает, что делать с уведомлением.
Дополнительное замечание, еще один вариант, который нужно рассмотреть, - это звук "приглушения". Если не обязательно, чтобы ваш звук воспроизводился в одиночку, например, простой звуковой сигнал, попробуйте использовать приглушение звука, которое понизит громкость фонового звука, чтобы воспроизвести ваш звук, и по завершении вернет фоновый звук к нормальному состоянию, когда вы закончите звук играть. См. Настройка аудио сеанса для более подробной информации об этих понятиях.