Zarządzanie wywołaniami przy użyciu interfejsu Telecom API

Z tego przewodnika dowiesz się, jak przekierować dźwięk w przypadku urządzeń Bluetooth za pomocą Telecom API i skonfiguruj połączenie Połączenia VoIP. Przeczytaj Przewodnik po tworzeniu aplikacji do rozmów zanim przejdziesz dalej.

Za pomocą funkcji ConnectionService i Connection zajęć, masz dostęp informacje o stanie dźwięku i listę dostępnych urządzeń Bluetooth. Może też kierować do wybranego urządzenia Bluetooth.

Połączenia VoIP oraz ConnectionService

Utwórz klasę VoIPConnection, która rozpoczyna się z Connection Ta klasa kontroluje stan bieżącego wywołania. Jako Przewodnik po tworzeniu aplikacji do rozmów ustaw tę aplikację jako aplikację do samodzielnego zarządzania i ustaw tryb audio dla połączeń VoIP aplikacji.

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

Następnie zwróć instancję klasy w ConnectionService, gdy połączenia przychodzącego lub wychodzącego.

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

Sprawdź, czy plik manifestu prawidłowo wskazuje klasę VoIPConnectionService.

<service android:name=".voip.TelegramConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
  <intent-filter>
    <action android:name="android.telecom.ConnectionService"/>
  </intent-filter>
</service>

W przypadku tych niestandardowych ustawień Connection oraz ConnectionService zajęć, Ty może kontrolować, które urządzenie i jakiego rodzaju kierowanie dźwięku chcesz używać podczas .

Pobierz bieżący stan dźwięku

Aby poznać bieżący stan dźwięku, wywołaj getCallAudioState() getCallAudioState() zwraca się, jeśli urządzenie przesyła dane strumieniowo przez Bluetooth, słuchawki, przewodową lub Głośnik.

mAudioState = connection.getCallAudioState()

Zmiana stanu włączenia

Subskrybuj zmiany w CallAudioState przez zastąpienie onCallAudioStateChanged() Informuje o wszelkich zmianach stanu.

Kotlin

fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState = audioState
}

Java

@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
  mAudioState = audioState;
}

Pobierz obecne urządzenie

Pobierz bieżące aktywne urządzenie za pomocą CallAudioState.getActiveBluetoothDevice() Ta funkcja zwraca aktywne urządzenie Bluetooth.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

Pobierz urządzenia Bluetooth

Pobieranie listy urządzeń Bluetooth, które obsługują kierowanie dźwięku podczas połączeń CallAudioState.getSupportedBluetoothDevices()

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

Przekieruj dźwięk połączenia

Kieruj dźwięk rozmowy na dostępne urządzenie Bluetooth za pomocą requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

Korzystanie z interfejsu API na poziomie 23 lub wyższym

Włącz ROUTE_BLUETOOTH bez wskazania urządzenia za pomocą setAudioRoute(int) Domyślnie ustawienia routingu na aktualnych, aktywnych urządzeniach Bluetooth na Androidzie 9 i nowszych.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);