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.

KotlinJava
class VoIPConnection : Connection() {
 
init {
    setConnectionProperties
(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip
(true)
 
}
}
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.

KotlinJava
class VoIPConnectionService : ConnectionService() {
 
override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount
: PhoneAccountHandle,
    request
: ConnectionRequest,
 
): Connection {
   
return VoIPConnection()
 
}
}
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.

KotlinJava
fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState
= audioState
}
@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.

KotlinJava
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
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()

KotlinJava
val availableBluetoothDevices: Collection
Collection

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