Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Callkit扬声器故障/WhatsApp如何修复?_Ios_Swift_Xcode_Whatsapp_Callkit - Fatal编程技术网

Ios Callkit扬声器故障/WhatsApp如何修复?

Ios Callkit扬声器故障/WhatsApp如何修复?,ios,swift,xcode,whatsapp,callkit,Ios,Swift,Xcode,Whatsapp,Callkit,我有一个具有Callkit功能的应用程序。当我按下扬声器按钮时,它将闪烁并设置为关闭状态(有时扬声器设置为“大声”,但图标仍处于关闭状态)。当我多次点击它时。。。可以清楚地看到,此功能运行不正常 然而,WhatsApp在开始时关闭了扬声器,3秒多后,扬声器启动并工作。有没有人遇到过类似的情况,可以给我一个解决方案 参考自 在以前的版本中也遇到过同样的问题。因此,这不是呼叫套件上出现的新问题。 这个问题必须通过iOS解决。我们无法控制这一切 请浏览苹果开发者论坛 及 苹果工程师提出了一种解决方案

我有一个具有
Callkit
功能的应用程序。当我按下扬声器按钮时,它将闪烁并设置为关闭状态(有时扬声器设置为“大声”,但图标仍处于关闭状态)。当我多次点击它时。。。可以清楚地看到,此功能运行不正常

然而,WhatsApp在开始时关闭了扬声器,3秒多后,扬声器启动并工作。有没有人遇到过类似的情况,可以给我一个解决方案

参考自

在以前的版本中也遇到过同样的问题。因此,这不是呼叫套件上出现的新问题。 这个问题必须通过iOS解决。我们无法控制这一切

请浏览苹果开发者论坛


苹果工程师提出了一种解决方案,可以修复callkit无法正确激活音频会话的问题:

解决方法是在应用程序生命周期的早期,调用
-provider:performAnswerCallAction:
方法之前,配置应用程序的音频会话(调用
configureAudioSession()
)。例如,您可以在调用
-[CXProvider reportNewIncomingCallWithUUID:update:completion://之前立即调用
configureAudioSession()
,以确保在通知CallKit有关传入呼叫之前,音频会话已完全配置

发件人:


如果这没有帮助,您可能应该发布一个复制您行为的示例项目,以便我们能够对其进行进一步分析。

也许您可以将mode设置为AVAudioSessionModeDefault

当我使用CallKit+WebRTC时

  • 我将AvaudioSessionMode配置为默认模式

  • Alloc CXProvider和reportNewIncomingCallWithUUID

  • 使用WebRTC,ICE连接后,WebRTC将模式更改为AVAudioSessionModeVoiceChat,然后发生扬声器问题

  • 后来我将模式设置回AVAudioSessionModeDefault,扬声器工作正常

  • 以上答案是正确的,“语音聊天”模式会毁掉一切

    Swift 4WebRTC示例。 建立连接后,调用next

    let rtcAudioSession = RTCAudioSession.sharedInstance()
    rtcAudioSession.lockForConfiguration()
    do {
        try rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: 
        AVAudioSession.CategoryOptions.mixWithOthers)
        try rtcAudioSession.setMode(AVAudioSession.Mode.default.rawValue)
        try rtcAudioSession.overrideOutputAudioPort(.none)
        try rtcAudioSession.setActive(true)
    } catch let error {
        debugPrint("Couldn't force audio to speaker: \(error)")
    }
    rtcAudioSession.unlockForConfiguration()
    

    您也可以使用AVAudioSession.sharedInstance()代替RTC

    我已通过执行以下步骤解决了此问题

    • 在CXAnswerCallAction中,使用以下代码设置audiosession配置

      RTCDispatcher.dispatchAsync(on: RTCDispatcherQueueType.typeAudioSession) {
      let audioSession = RTCAudioSession.sharedInstance()
      audioSession.lockForConfiguration()
      let configuration = RTCAudioSessionConfiguration.webRTC()
      configuration.categoryOptions = [AVAudioSessionCategoryOptions.allowBluetoothA2DP,AVAudioSessionCategoryOptions.duckOthers,
                                       AVAudioSessionCategoryOptions.allowBluetooth]
      try? audioSession.setConfiguration(configuration)
      audioSession.unlockForConfiguration()}
      
    • 连接呼叫后,我将AudioSession类别重置为默认

      func configureAudioSession() {
      let session = RTCAudioSession.sharedInstance()
      session.lockForConfiguration()
      do {            
          try session.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: .allowBluetooth)
          try session.setMode(AVAudioSession.Mode.default.rawValue)
          try session.setPreferredSampleRate(44100.0)
          try session.setPreferredIOBufferDuration(0.005)
      } 
      catch let error {
          debugPrint("Error changeing AVAudioSession category: \(error)")
      }
      session.unlockForConfiguration()}
      

    谢谢你的帮助。

    没有。我并没有像你说的那样冻结展示。它可以工作,但我需要双击扬声器按钮来激活它和它本身的停用。我认为这不是CallKit功能的问题。您可以重新启动iPhone,然后再试一次。有时候iPhone不能正常响应,所以你可以重新启动然后试试。斯瓦蒂:我有iPhone 5、6、6s和iPhone X。在所有这些设备上,您必须按两下才能看到有源扬声器及其行为不正确。所有其他按钮工作正常,但扬声器不正常。是的。。。几乎有同样的问题,同样的问题,但我看不到任何解决方案。伙计们。。。。谢谢大家的回复。。。但是你的链接都是一文不值的…那里没有好的信息。你能在GitHub中提供示例项目吗?@Pan你解决问题了吗?没有。还有这个问题。。。我悬赏了总共800点声誉积分,但没有给出满意的答案me@PanMluv你找到解决办法了吗?我也面临同样的问题。@GabrielGava不。。。没有找到任何解决方案我在执行此操作时遇到另一个问题。当连接呼叫后将voiceChat模式更改为默认模式时,我的音频会话端口覆盖也会更改。例如,我用扩音器打电话,当电话接通后,扩音器会换成麦克风。有什么建议吗?嗨,把代码配置音频会话放在哪里?您的意思是rtc已连接或呼叫已连接?