En esta guía, se explica cómo enrutar audio para dispositivos Bluetooth con el Telecom API y configura la conexión para Llamadas VoIP Lee el Guía para compilar una app de llamadas antes de continuar.
Mediante ConnectionService
y Connection
, puedes acceder
el estado de audio y una lista de los dispositivos Bluetooth disponibles, y puede enrutar
audio a un dispositivo Bluetooth seleccionado.
VoIP Connection y ConnectionService
Crea una clase VoIPConnection
que se extienda de
Connection
Esta clase controla el estado de la llamada actual. Como
Guía para compilar una app de llamadas
haz que esta sea una aplicación autoadministrada y establece el modo de audio para una
y mantener la integridad de su aplicación.
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); } }
A continuación, muestra una instancia de esta clase en
ConnectionService
cuando un elemento
se produce una llamada entrante o saliente.
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(); } }
Asegúrate de que el manifiesto apunte correctamente a la clase 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>
Con estos Connection
personalizados y
ConnectionService
clases, tú
puedes controlar qué dispositivo y qué tipo de enrutamiento de audio deseas utilizar durante una
llamada.
Obtén el estado de audio actual
Para obtener el estado de audio actual, llama
getCallAudioState()
getCallAudioState()
si el dispositivo está transmitiendo con Bluetooth, Auricular, Con cable o
Bocina.
mAudioState = connection.getCallAudioState()
Cuando se cambió el estado
Anula la suscripción a los cambios en CallAudioState
onCallAudioStateChanged()
Esto te alertará de cualquier cambio en el estado.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Obtén el dispositivo actual
Obtén el dispositivo activo actual con
CallAudioState.getActiveBluetoothDevice()
Esta función muestra el dispositivo Bluetooth activo.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Obtener dispositivos Bluetooth
Obtener una lista de dispositivos Bluetooth disponibles para el enrutamiento de audio de llamadas mediante
CallAudioState.getSupportedBluetoothDevices()
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Enrutar el audio de la llamada
Se usa el nivel de API 28 y versiones posteriores (recomendado)
Enruta el audio de la llamada a un dispositivo Bluetooth disponible mediante
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Con el nivel de API 23 y versiones posteriores
Habilitar
ROUTE_BLUETOOTH
sin especificar el dispositivo mediante
setAudioRoute(int)
De forma predeterminada, el enrutamiento a dispositivos Bluetooth activos y actuales en Android 9 y versiones posteriores
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);