2013-04-04 68 views
2

我编程播放背景音乐的应用程序,这样做,我使用AVAudioSession像这样:AVAudioSession阻塞系统的音频

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"song" ofType:@"mp3"]]; 
player = [[AVAudioPlayer alloc] initWithData:data error:NULL]; 
player.delegate = self; 
[player setVolume:1.0]; 
... 
[player prepareToPlay]; 
[player play]; 

然后,以后,用户必须禁用音乐的选项。如果他们选择这样做,下面的代码运行:

[[AVAudioSession sharedInstance] setActive:NO error:nil]; 
[player stop]; 

成功地停止音乐从播放。但是,如果音乐应用程序(或另一个如Spotify)的音乐开始播放,然后切换到该应用程序,用户音乐将淡出并暂停。我的应用程序的音乐无法播放,因为它仍然处于禁用状态,因此用户会保持沉默。

如何让我的应用程序暂停用户的音乐?

+0

你为什么不进行逻辑控制?如果用户选择禁用音乐,则只需停止AVAudioPlayer即可。是否需要调用'[[AVAudioSession sharedInstance] setActive:NO er​​ror:nil]'? – 2013-04-04 20:26:42

+0

这是为了解决问题而添加的。最初,我只是“停止”玩家,但这仍然导致了这个问题。 – Jumhyn 2013-04-04 20:31:09

+0

另外,如果用户停用音乐,将音频会话设置为非活动状态是否有意义? – Jumhyn 2013-04-04 20:32:00

回答

10

你必须做到以下几点当用户选择删除音频:

[player stop]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 
+1

非常有帮助的答案 – incmiko 2014-04-13 22:38:40

3

你需要设置你的音频会话类

NSError *categoryError = nil; 
[audioSession setCategory: AVAudioSessionCategoryAmbient error: &categoryError]; 

如果你将其设置为AVAudioSessionCategorySoloAmbient(这是默认),它会杀死的背景音乐,让您的应用程序接管,即使你不玩音乐。当您打算播放音乐时,最好将其设置为SoloAmbient,并在用户禁用音乐时将其设置为Ambient。