Z tego przewodnika dowiesz się, jak kierować dźwięk na urządzenia Bluetooth za pomocą interfejsu Telecom API oraz konfigurować połączenie na potrzeby połączeń VoIP. Zanim przejdziesz dalej, przeczytaj przewodnik Tworzenie aplikacji do rozmów.
Klasy ConnectionService
i Connection
dają dostęp do stanu dźwięku i listy dostępnych urządzeń Bluetooth, a także umożliwiają kierowanie dźwięku na wybrane urządzenie Bluetooth.
Połączenie i usługa połączeń VoIP
Utwórz zajęcia VoIPConnection
, które wykraczają poza zakres Connection
. Ta klasa kontroluje stan bieżącego wywołania. Zgodnie z instrukcjami w przewodniku Tworzenie aplikacji do połączeń utwórz aplikację jako samodzielnie zarządzaną i ustaw tryb audio dla aplikacji VoIP.
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 w momencie wystąpienia połączenia przychodzącego lub wychodzącego zwróć wystąpienie tej klasy w zadaniu ConnectionService
.
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(); } }
Upewnij się, że 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>
Dzięki tym niestandardowym klasom Connection
i ConnectionService
możesz określić, którego urządzenia i jakiego routingu dźwięku chcesz używać podczas połączenia.
Pobierz bieżący stan dźwięku
Aby sprawdzić bieżący stan dźwięku, wywołaj metodę getCallAudioState()
.
getCallAudioState()
zwraca wartość, jeśli urządzenie odtwarza treści strumieniowo przez Bluetooth, słuchawkę, przewodową lub głośnik.
mAudioState = connection.getCallAudioState()
Zmiana stanu
Zasubskrybuj zmiany w CallAudioState, zastępując fragment onCallAudioStateChanged()
.
Będzie to informować o wszelkich zmianach stanu.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Weź bieżące urządzenie
Pobierz aktualne aktywne urządzenie, korzystając z metody CallAudioState.getActiveBluetoothDevice()
.
Ta funkcja zwraca aktywne urządzenie Bluetooth.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Pobierz urządzenia Bluetooth
Uzyskaj listę urządzeń Bluetooth, które są dostępne do kierowania dźwięku połączeń przy użyciu CallAudioState.getSupportedBluetoothDevices()
.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Kierowanie dźwięku połączenia
Używanie interfejsu API na poziomie 28 lub wyższym (zalecane)
Kieruj dźwięk połączenia na dostępne urządzenie Bluetooth za pomocą requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Używanie interfejsu API na poziomie 23 lub wyższym
Włącz ROUTE_BLUETOOTH
bez określania urządzenia za pomocą metody setAudioRoute(int)
.
To ustawienie domyślne powoduje kierowanie na obecne, aktywne urządzenia Bluetooth na Androidzie 9 i nowszych.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);