In dieser Anleitung wird beschrieben, wie Sie Audio für Bluetooth-Geräte mithilfe der Telecom API weiterleiten und die Verbindung für VoIP-Anrufe einrichten. Lesen Sie die Anleitung zum Erstellen einer Anruf-App, bevor Sie fortfahren.
Mithilfe der Klassen ConnectionService
und Connection
können Sie auf den Audiostatus und eine Liste der verfügbaren Bluetooth-Geräte zugreifen und Audioinhalte an ein ausgewähltes Bluetooth-Gerät weiterleiten.
VoIP Connection und ConnectionService
Erstellen Sie eine VoIPConnection
-Klasse, die über Connection
erweitert wird. Diese Klasse steuert den Status des aktuellen Anrufs. Wie im Leitfaden zum Erstellen einer Anruf-App beschrieben, machen Sie die App zu einer selbstverwalteten Anwendung und legen Sie den Audiomodus für eine VoIP-Anwendung fest.
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); } }
Als Nächstes wird bei einem ein- oder ausgehenden Anruf eine Instanz dieser Klasse in ConnectionService
zurückgegeben.
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>
Mit diesen benutzerdefinierten Klassen Connection
und ConnectionService
können Sie steuern, welches Gerät und welche Art von Audiorouting Sie während eines Anrufs verwenden möchten.
Aktuellen Audiostatus abrufen
Rufen Sie getCallAudioState()
auf, um den aktuellen Audiostatus abzurufen.
getCallAudioState()
wird zurückgegeben, wenn das Gerät über Bluetooth, Kopfhörer, kabelgebunden oder über einen Lautsprecher streamt.
mAudioState = connection.getCallAudioState()
Bei Status geändert
Sie können die Änderungen an CallAudioState abonnieren, indem Sie onCallAudioStateChanged()
überschreiben.
Dadurch werden Sie über Statusänderungen informiert.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Aktuelles Gerät herunterladen
Rufen Sie das aktuell aktive Gerät mit CallAudioState.getActiveBluetoothDevice()
ab.
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
Mit CallAudioState.getSupportedBluetoothDevices()
lässt sich eine Liste der Bluetooth-Geräte abrufen, die für das Audiorouting von Anrufen verfügbar sind.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Audio für Anruf weiterleiten
API-Level 28 oder höher (empfohlen)
Audio des Anrufs mit requestBluetoothAudio(BluetoothDevice)
an ein verfügbares Bluetooth-Gerät weiterleiten:
requestBluetoothAudio(availableBluetoothDevices[0]);
API-Level 23 oder höher wird verwendet
Aktivieren Sie ROUTE_BLUETOOTH
, ohne das Gerät mit setAudioRoute(int)
anzugeben.
Dadurch wird das Routing zu aktuellen, aktiven Bluetooth-Geräten unter Android 9 und höher standardmäßig aktiviert.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);