【问题标题】:Audio outputs callkit ActionSheet - possible to start from code?音频输出 callkit ActionSheet - 可以从代码开始吗?
【发布时间】:2019-01-10 13:50:35
【问题描述】:

我正在寻找一种像 callkit 一样显示可用音频输出列表的方法 - 它显示带有列出设备的 ActionSheet - 查看照片(在连接蓝牙扬声器和耳机时触摸音频按钮的正常通话)。

是否有可能使用一段代码显示此操作表?现在,我对枚举和显示音频输出的搜索使我能够枚举输入并以某种方式或用户多路由类别进行映射(请参阅List available output audio target AVAudioSession)。也许有一些更原生/简单的方法?

【问题讨论】:

    标签: ios swift avaudiosession


    【解决方案1】:

    我试图这样做,但没有运气。 我想出的最接近的解决方案是使用以下方法检测是否连接了耳机:

    extension AVAudioSession {
        static var connectedHeadphones: AVAudioSessionPortDescription? {
            return sharedInstance().currentRoute.outputs.first(where: { $0.isHeadphones })
        }
    }
    
    extension AVAudioSessionPortDescription {
        var isHeadphones: Bool {
            return portType == AVAudioSession.Port.headphones || portType == AVAudioSession.Port.bluetoothA2DP
        }
    }
    

    然后将其设置为 AVAudioSession:

    try session.setPreferredInput(connectedHeadphones)

    【讨论】:

    • 这不是我的问题的答案。这里 - *.com/questions/12264697/… - 你有一个潜在输出设备的列表。耳机只是其中之一,我已经用你写的方式处理了。我希望有其他方法可以做到这一点,而不是手动创建一个包含已连接设备列表的 ActionSheet。
    • 您可以在 callKit UI 中更改的唯一内容是通过 configuration.iconTemplateImageData 更改的应用程序图标,没有其他选项可以更改 UI,因为它由 iOS 处理。
    【解决方案2】:

    好的,一段时间后我可以回答我的问题 - 不幸的是,这是不可能的。唯一的选择是处理 AVAudioSession.availableInputs 以获取输入列表,用它构建和 UIAlertController 并使用 setPreferredInput 和 overrideOutputAudioPort 的组合设置用户的选择。

    【讨论】:

      最近更新 更多