如何停止和恢复iPhone应用程序的背景audio?

我在基于消息的iPhone应用程序工作。 我添加了哔声以接收其他人的消息。 我正在使用AVAudioPlayer播放哔声。 我的问题是,如果用户从我的应用程序接收到来自应用程序的消息时,将听到来自其他应用程序的歌曲,则会播放哔声,并且背景音乐/audio停止不恢复。

我想通过暂停背景歌曲/audio播放我的嘟嘟声,而且我必须从我的应用程序恢复该audio/歌曲。 有可能在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]; } } 

你不能为所有的应用程序做这个。 对于在其应用程序中使用iPod播放器的应用程序:

假设你的应用程序在前台。 你可以这样做:

 MPMusicPlayerController *mp = [MPMusicPlayerController iPodMusicPlayer]; [mp stop]; // or [mp pause] 

这需要MediaPlayer.framework#import <MediaPlayer/MediaPlayer.h>

阅读更多在MPMusicPlayerController参考 。


为了通过audio播放器会话来做到这一点,你可以使用属性kAudioSessionCategory_SoloAmbientSound 。 在这里引用 。

这与AVAudioSession类中定义的AVAudioSessionCategorySoloAmbient类似。

从文档引用:

当您使用此类别时,来自其他应用程序的audio会消失。

对于晚会有点晚,但对于那些想要解决播放声音后暂停和解除背景(即iPod音乐)问题的解决scheme,您应该在停用audio会话时使用以下内容。

 [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error]; 

//不推荐使用的新方法:

 [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error]; 

每当你不需要你的应用程序中的audio会话(即当你不输出任何声音),你应该停用它。 在有意义的地方,你应该使用这种方法,以便通知任何背景audio,并可以恢复(收到这个通知的应用程序不一定要恢复)。

另外,您必须使用适当的audio类别才能让您的声音在需要的地方播放。 这可以使用AVAudioSessionCategoryAmbient以外的任何类别来完成。 当您的audio会话激活时,这会自动暂停后台audio。 但是,它不会重新激活任何背景audio,这是通过使用上面的代码。 在这种情况下,如前所述,背景audio决定如何处理通知。

注意,另一个选项是audio“回避”。 如果您的声音不是独立播放的,比如简单的警报声音,请尝试使用低音,这会降低背景audio的音量以播放您的声音;完成后,当声音完成时将背景audio恢复到正常播放。 有关这些概念的更多详细信息,请参阅configurationaudio会话 。