Audioausgabe für Anrufe (iOS)

Um eine nahtlose Umschaltung der Audioausgabe innerhalb Ihrer Application zu ermöglichen, sollten Sie das leistungsstarke CallKit-Framework von Apple integrieren. CallKit ermöglicht es Ihrer Application, Anrufdienste effizient zu verwalten und sorgt so für ein reibungsloses Benutzererlebnis. Weitere Informationen finden Sie in der offiziellen Dokumentation von Apple zu CallKit. hier.

CallKit integrieren

Umfassende Anleitungen zur Integration von CallKit in Ihr Projekt und zur optimalen Nutzung seines Potenzials finden Sie unter Push-Benachrichtigungen.

Aktuelle Audioausgangswege

Um die derzeit verfügbaren Audioausgangsquellen abzurufen, können Sie Folgendes verwenden: AVAudioSession's currentRoute.outputs Eigenschaft. Dadurch erhalten Sie eine Liste aller derzeit verfügbaren Ausgabequellen.

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)")
                }
            }

Sie können die Audioausgabequelle auch mithilfe des folgenden Codeausschnitts überschreiben:

// highlight-next-line
AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)

Wir empfehlen, das Festlegen oder Überschreiben von Audioeinstellungen über CallKit für ein besseres Erlebnis.

Beobachtung von Änderungen bei der Audioausgabe

Sie können sich bei der AVAudioSession.routeChangeNotification Benachrichtigung, um Änderungen an der Audioausgabe zu beobachten. So geht’s:

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()
}