Ce guide explique comment acheminer l'audio pour les appareils Bluetooth à l'aide de l'API Telecom et comment définir la connexion pour les appels VoIP. Lisez le guide Créer une application appelante avant de continuer.
En utilisant les classes ConnectionService
et Connection
, vous pouvez accéder à l'état du son et à la liste des appareils Bluetooth disponibles, et acheminer le contenu audio vers un appareil Bluetooth sélectionné.
Service de connexion et de connexion VoIP
Créez une classe VoIPConnection
qui s'étend à partir de Connection
. Cette classe contrôle l'état de l'appel en cours. Comme indiqué dans le guide Créer une application appelante, définissez cette application autogérée et définissez le mode audio pour une application 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); } }
Renvoyez ensuite une instance de cette classe dans ConnectionService
lorsqu'un appel entrant ou sortant se produit.
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(); } }
Assurez-vous que le fichier manifeste pointe correctement vers la classe 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>
Ces classes Connection
et ConnectionService
personnalisées vous permettent de contrôler l'appareil et le type de routage audio que vous souhaitez utiliser lors d'un appel.
Obtenir l'état de l'audio actuel
Pour obtenir l'état audio actuel, appelez getCallAudioState()
.
getCallAudioState()
renvoie la valeur si l'appareil diffuse du contenu en streaming via le Bluetooth, l'écouteur, le câblage ou l'enceinte.
mAudioState = connection.getCallAudioState()
Lors du changement d'état
Abonnez-vous aux modifications dans CallAudioState en remplaçant onCallAudioStateChanged()
.
Vous êtes ainsi averti de tout changement de l'état.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Obtenir l'appareil actuel
Obtenez l'appareil actif actuel à l'aide de CallAudioState.getActiveBluetoothDevice()
.
Cette fonction renvoie l'appareil Bluetooth actif.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Obtenir des appareils Bluetooth
Obtenez la liste des appareils Bluetooth disponibles pour le routage audio des appels à l'aide de CallAudioState.getSupportedBluetoothDevices()
.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Diriger l'audio de l'appel
Utiliser le niveau d'API 28 ou supérieur (recommandé)
Acheminez l'audio de l'appel vers un appareil Bluetooth disponible à l'aide de requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Utiliser le niveau d'API 23 ou supérieur
Activez ROUTE_BLUETOOTH
sans spécifier l'appareil à l'aide de setAudioRoute(int)
.
Par défaut, le routage est effectué vers les appareils Bluetooth actifs actuels sur Android 9 ou version ultérieure.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);