CallKit 扬声器按钮无法正常工作

问题描述 投票:0回答:1

我正在将 CallKit 用于我的音频通话应用程序。 CallKit 中的扬声器按钮无法正常工作。它会自动打开和关闭。当我尝试禁用扬声器按钮时,我仍然可以通过扬声器听到声音。

我想要的是最初将通话设置为使用扬声器,然后允许用户根据他们在 CallKit UI 中的操作在听筒和扬声器之间切换。但是,当我禁用扬声器按钮以通过耳机播放时,它不起作用。这个问题有解决办法吗?

我发现 CallKit 扬声器 UI 问题仍未解决,因为有许多与同一问题相关的未解决问题。即使存在 UI 问题,我也希望根据用户的选择通过耳机或扬声器播放音频,无论按钮的 UI 状态如何。

下面是日志,我不确定这个

categoryChange
routeConfigurationChange
是如何被触发并将其从扬声器更新到接收器的。

  1. 音频:内置扬声器
  2. 音频:类别更改
  3. 音频:内置接收器
  4. 音频:路由配置更改
  5. 音频:内置接收器

下面是我用于配置音频会话的代码,我正在

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) 

中激活音频会话
func configureAudioSession() {
    let rtcAudioSession = RTCAudioSession.sharedInstance()
    rtcAudioSession.lockForConfiguration()
    do {
        var categoryOptions: AVAudioSession.CategoryOptions = [.defaultToSpeaker, .allowBluetoothA2DP, .allowAirPlay, .allowBluetooth]
        
        try rtcAudioSession.setCategory(.playAndRecord, with: categoryOptions)
        try rtcAudioSession.setMode(.voiceChat)
    } catch {
        //Error
    }
    rtcAudioSession.unlockForConfiguration()
    
    NotificationCenter.default.addObserver(self, selector: #selector(routeChange), name: AVAudioSession.routeChangeNotification, object: nil)
}

@objc private func routeChange(_ n: Foundation.Notification) {
    
    let session = AVAudioSession.sharedInstance()
    let currentRoute = session.currentRoute
    
    
    if session.currentRoute.outputs.contains(where: { $0.portType == .headphones || $0.portType == .bluetoothHFP || $0.portType == .bluetoothA2DP }) {
        try? session.overrideOutputAudioPort(.none)
    } else {
        try? session.overrideOutputAudioPort(.speaker)
    }
}
ios swift callkit
1个回答
0
投票

你解决这个问题了吗?我也遇到同样的问题。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.