Salida de audio para llamadas (iOS)
Para permitir un cambio fluido de la salida de audio dentro de tu aplicación, te recomendamos integrar el sólido marco CallKit de Apple. CallKit permite a tu aplicación gestionar los servicios de llamadas de forma eficiente, garantizando una experiencia de usuario fluida. Consulta la documentación oficial de Apple sobre CallKit. aquí.
Integración de CallKit
Para obtener una guía completa sobre cómo integrar CallKit en tu proyecto y aprovechar todo su potencial, consulta Notificaciones push.
Rutas actuales de salida de audio
Para obtener las fuentes de salida de audio disponibles actualmente, puedes utilizar AVAudioSession's currentRoute.outputs propiedad. Esto te mostrará una lista de todas las fuentes de salida disponibles en este momento.
let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
outputs.forEach { audioSource in
switch audioSource.portType {
case .headphones:
print("headphones are used")
case .bluetoothA2DP:
print("Bluetooth audio is connected")
case .builtInSpeaker:
print("speaker is used")
case .builtInReceiver:
print("earpiece is used")
default:
print("other output: \(audioSource.portType.rawValue)")
}
}
También puedes anular la fuente de salida de audio utilizando el siguiente fragmento de código:
// highlight-next-line
AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
Recomendamos evitar configurar o anular los ajustes de audio a través de CallKit para disfrutar de una mejor experiencia.
Observación de los cambios en la salida de audio
Puedes suscribirte a la AVAudioSession.routeChangeNotification Notificación para detectar cambios en la salida de audio. A continuación te explicamos cómo hacerlo:
var cancelable: AnyCancellable?
func observeAudioRouteChanges() {
self.cancelable = NotificationCenter.default.publisher(for: AVAudioSession.routeChangeNotification).sink { notification in
/// process notification's user Info, to get audio change information
}
}
func removeAudioRouteChangesObserver() {
cancelable?.cancel()
}