In diesem Leitfaden wird die Weiterleitung von Audio für Bluetooth-Geräte mithilfe der Telecom API und legen Sie die Verbindung für VoIP-Anrufe. Lesen Sie die Leitfaden Anruf-App erstellen bevor Sie fortfahren.
Über den ConnectionService
und Connection
Kurse haben, haben Sie Zugriff auf
den Audiostatus und eine Liste der verfügbaren Bluetooth-Geräte
Audio auf einem ausgewählten Bluetooth-Gerät.
VoIP-Verbindung und ConnectionService
Erstellen Sie eine VoIPConnection
-Klasse, die aus
Connection
Diese Klasse steuert den Status des aktuellen Aufrufs. Da die
Leitfaden Anruf-App erstellen
App zu einer selbstverwalteten Anwendung machen und den Audiomodus für eine VoIP festlegen
.
Kotlin
class VoIPConnection : Connection() { init { setConnectionProperties(PROPERTY_SELF_MANAGED) setAudioModeIsVoip(true) } }
Java
public class VoIPConnection extends Connection { public VoIPConnection() { setConnectionProperties(PROPERTY_SELF_MANAGED); setAudioModeIsVoip(true); } }
Geben Sie als Nächstes
eine Instanz dieser Klasse in
ConnectionService
, wenn ein
eingehende oder ausgehende Anrufe erfolgen.
Kotlin
class VoIPConnectionService : ConnectionService() { override fun onCreateOutgoingConnection( connectionManagerPhoneAccount: PhoneAccountHandle, request: ConnectionRequest, ): Connection { return VoIPConnection() } }
Java
public class VoIPConnectionService extends ConnectionService { @Override public Connection onCreateOutgoingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) { return new VoIPConnection(); } }
Achten Sie darauf, dass das Manifest korrekt auf die Klasse VoIPConnectionService
verweist.
<service android:name=".voip.TelegramConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
<intent-filter>
<action android:name="android.telecom.ConnectionService"/>
</intent-filter>
</service>
Bei diesen benutzerdefinierten Connection
- und
ConnectionService
Kurse, Sie
welches Gerät und welche Art von Audiorouting du während eines
aufrufen.
Aktuellen Audiostatus abrufen
Um den aktuellen Audiostatus zu erfahren, rufe
getCallAudioState()
getCallAudioState()
gibt an, ob das Gerät über Bluetooth, Kopfhörer, Kabelgebunden oder
Lautsprecher.
mAudioState = connection.getCallAudioState()
Bei Status geändert
Änderungen in CallAudioState durch Überschreiben von Änderungen abonnieren
onCallAudioStateChanged()
Dadurch werden Sie über alle Statusänderungen informiert.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Aktuelles Gerät holen
Rufen Sie das aktuell aktive Gerät ab mit
CallAudioState.getActiveBluetoothDevice()
Diese Funktion gibt das aktive Bluetooth-Gerät zurück.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Bluetooth-Geräte kaufen
Liste der Bluetooth-Geräte abrufen, die für die Audioweiterleitung von Anrufen zur Verfügung stehen mithilfe von
CallAudioState.getSupportedBluetoothDevices()
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Anruf-Audio weiterleiten
API-Level 28 und höher verwenden (empfohlen)
Leiten Sie den Anruf mithilfe von
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
API-Level 23 und höher verwenden
Aktivieren
ROUTE_BLUETOOTH
ohne das Gerät anzugeben,
setAudioRoute(int)
Unter Android 9 und höher wird das Routing standardmäßig an aktuelle, aktive Bluetooth-Geräte gesendet.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);