Аудио выходы CallKit ActionSheet - можно начать с кода? - PullRequest
0 голосов
/ 10 января 2019

Я ищу способ отображения списка доступных аудиовыходов, как это делает callkit - показывает ActionSheet с перечисленными устройствами - см. Фото (обычный вызов с нажатой кнопкой звука, когда подключен динамик Bluetooth и наушники).

normal call with audio button touched while bluetooth speaker and headphones connected

Есть ли возможность показать этот лист действий, используя кусок кода? Прямо сейчас мои поиски по перечислению и отображению аудиовыходов заставляют меня перечислять входы и отображать их каким-либо образом или в категории multiRoute пользователя (см. Список доступных выходных аудиовыходов AVAudioSession ). Может быть, есть какой-то более родной / простой способ?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

ОК, через некоторое время я могу ответить на мой вопрос - к сожалению, это невозможно. Единственный вариант - иметь дело с AVAudioSession.availableInputs, чтобы получить список входов, построить и UIAlertController с ним, и с помощью комбинации setPreferredInput и overrideOutputAudioPort установить выбор пользователя.

0 голосов
/ 10 января 2019

Я пытался сделать это, но безуспешно. Самое близкое решение, которое я решил, это определить, подключены ли наушники, используя следующее:

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)

...