【问题标题】:AVAudioSession blocking system audioAVAudioSession 阻塞系统音频
【发布时间】:2013-04-04 20:22:40
【问题描述】:

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

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

【问题讨论】:

  • 你为什么不做一个逻辑控制?如果用户选择禁用音乐,您只需停止 AVAudioPlayer。有需要打电话[[AVAudioSession sharedInstance] setActive:NO error:nil]吗?
  • 这是为了解决问题而添加的。最初,我只是 stopping 播放器,但这仍然导致了这个问题。
  • 另外,如果用户停用音乐,将音频会话设置为不活动是否有意义?
  • 尝试删除setActive:并致电[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
  • 成功了!提交作为答案,我会接受。

标签: iphone objective-c avaudioplayer avaudiosession


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您需要设置音频会话类别

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多