拨出电话后如何恢复背景音乐(iOS)?

Posted

技术标签:

【中文标题】拨出电话后如何恢复背景音乐(iOS)?【英文标题】:How to resume background music after out-going phone call (iOS)? 【发布时间】:2011-10-27 04:36:43 【问题描述】:

我正在使用 AVAudioPlayer 播放音乐(支持背景)。我的问题是如果我想在听音乐时给某人打电话,通话后如何恢复?我已经实现了 AVAudioPlayer 的委托方法:

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)thePlayer 
    [[AVAudiosession sharedInstance] setActive:YES error:nil];
    [self.player play];

但这不会让音乐继续播放。

我也尝试过使用 AVAudioSessionDelegate 方法(试一试):

- (void)viewDidLoad 
    [[AVAudioSession sharedInstance] setDelegate:self];


- (void)endInterruption

    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [self.player play];

但这不会导致音乐继续播放。关于如何解决这个问题的任何想法?

【问题讨论】:

【参考方案1】:

奇怪的是,你说你确实使用了 AVAudioPlayer,为什么你还要实现 AVAudioSessionDelegate?

而且你对委托方法的实现很糟糕。查看文档

from AVAudioPlayerDelegate:

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags

所以尝试像这样实现它们,它应该可以正常工作

【讨论】:

Marek,我已经实现了你发布的第一个委托方法 - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player,但这不起作用。【参考方案2】:

在 iOS 上,应用程序在后台运行时无法开始播放音频。如果您的应用的音频因前台应用控制了音频会话而停止,则(当前)无法将其取回。

【讨论】:

【参考方案3】:

您可以恢复它。完成音频会话后,您必须通知其他应用程序我的应用程序停用了音频会话,您可以使用它。使用以下代码。

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

【讨论】:

以上是关于拨出电话后如何恢复背景音乐(iOS)?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CallKit 显示用于拨出 VoIP 呼叫的 iOS 本机呼叫 UI

拨出电话时的后台行为,iOS 7 与 iOS 8

如何将来自 url 的音频流直播到拨出的 twilio 电话中?

如何在 Android 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?

在IOS中运行音乐时检测电话已完成

如何挂断Android中的拨出电话?