返回

iOS HMSSDK 音频通话中如何启用扬声器模式?

IOS

在 iOS HMSSDK 中启用音频通话扬声器模式

问题

在使用 HMSSDK 开发音频通话功能时,接听来电后,设备的扬声器默认开启。尽管尝试了使用 hmsSDK.switchAudioOutput(to: .earpiece) 切换音频输出,但扬声器仍然无法关闭。

解决方案

通过以下步骤可以解决此问题:

1. 设置音频会话类别

// 配置音频会话类别
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playAndRecord, options: .allowBluetoothA2DP)

2. 启用扬声器模式

// 启用扬声器模式
try audioSession.overrideOutputAudioPort(.speaker)

3. 监听音频会话中断

// 监听音频会话中断
NotificationCenter.default.addObserver(self, selector: #selector(handleAudioSessionInterruption(_:)), name: AVAudioSession.interruptionNotification, object: nil)
// 处理音频会话中断
@objc func handleAudioSessionInterruption(_ notification: Notification) {
    guard let interruptionType = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? UInt else { return }
    
    switch interruptionType {
    case AVAudioSessionInterruptionType.began:
        // 中断开始,关闭扬声器
        try? audioSession.overrideOutputAudioPort(.none)
    case AVAudioSessionInterruptionType.ended:
        // 中断结束,重新启用扬声器
        try? audioSession.overrideOutputAudioPort(.speaker)
    default:
        break
    }
}

4. HMSSDK 代码示例

// 初始化 HMSSDK
let hmsSDK = HMSSDK()

// ... 代码 ...

// 接听来电并启用扬声器模式
hmsSDK.addCallStatusListener(self, callStatusHandler: { callStatus in
    switch callStatus {
    case .received:
        // 来电,启用扬声器模式
        try? audioSession.overrideOutputAudioPort(.speaker)
    default:
        break
    }
})

其他注意事项

  • 确保使用最新版本的 HMSSDK。
  • 确认设备支持扬声器输出。
  • 授予应用访问麦克风和扬声器的权限。

总结

通过上述步骤,可以实现 iOS HMSSDK 音频通话扬声器模式功能,确保来电时自动启用扬声器输出。

常见问题解答

1. 扬声器模式仍无法启用。

  • 检查设备是否支持扬声器输出。
  • 确保授予了访问麦克风和扬声器的权限。
  • 检查 HMSSDK 版本是否为最新。

2. 在通话过程中扬声器模式被意外关闭。

  • 监听音频会话中断并根据中断类型处理音频输出。

3. 通话结束后扬声器模式仍未关闭。

  • 确保在通话结束时重置音频会话设置。

4. 如何切换回听筒模式?

  • 使用 hmsSDK.switchAudioOutput(to: .earpiece) 将音频输出切换回听筒。

5. 在蓝牙设备连接时如何处理扬声器模式?

  • 监听音频路由更改并根据连接的设备调整音频输出。