3

我正在编写一个播放背景音乐的应用程序,为此我正在使用 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)中的音乐启动,然后切换到应用程序,用户的音乐将淡出并暂停。我的应用程序的音乐不会播放,因为它仍然被禁用,所以用户会保持沉默。

如何防止我的应用暂停用户的音乐?

4

2 回答 2

10

当用户选择删除音频时,您必须执行以下操作:

[player stop];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
于 2013-04-04T20:37:31.610 回答
3

您需要设置音频会话类别

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

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

于 2013-04-04T20:36:41.913 回答