Aufrufe mit der Telecom API verwalten

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

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

Anruf-Audio weiterleiten

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);