Questa guida spiega come indirizzare l'audio per i dispositivi Bluetooth utilizzando l'API Telecom e come impostare la connessione per le chiamate VoIP. Leggi la guida Creazione di un'app per le chiamate prima di continuare.
Utilizzando le classi ConnectionService
e Connection
, puoi accedere
allo stato audio e a un elenco dei dispositivi Bluetooth disponibili, nonché indirizzare
l'audio a un dispositivo Bluetooth selezionato.
Connessione VoIP e ConnectionService
Crea una classe VoIPConnection
che si estende da
Connection
. Questa classe controlla lo stato della chiamata in corso. Come indicato nella guida Crea un'app per le chiamate, configura questa applicazione autogestita e imposta la modalità audio per un'applicazione 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); } }
Quindi, restituisci un'istanza di questa classe in ConnectionService
quando si verifica una chiamata in arrivo o in uscita.
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(); } }
Assicurati che il manifest rimandi correttamente alla 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>
Con queste classi personalizzate Connection
e ConnectionService
, puoi controllare quale dispositivo e quale tipo di routing audio vuoi utilizzare durante una chiamata.
Recupero dello stato dell'audio attuale
Per conoscere lo stato audio attuale, chiama
getCallAudioState()
.
getCallAudioState()
viene visualizzato se il dispositivo trasmette in streaming tramite Bluetooth, auricolare, cavo o altoparlante.
mAudioState = connection.getCallAudioState()
Stato alla modifica
Iscriviti alle modifiche in CallAudioState eseguendo l'override di onCallAudioStateChanged()
.
Ti avvisa di eventuali modifiche dello stato.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Prendi il dispositivo attuale
Scarica il dispositivo attivo corrente utilizzando
CallAudioState.getActiveBluetoothDevice()
.
Questa funzione restituisce il dispositivo Bluetooth attivo.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Ottieni dispositivi Bluetooth
Visualizza un elenco dei dispositivi Bluetooth disponibili per il routing audio delle chiamate utilizzando
CallAudioState.getSupportedBluetoothDevices()
.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Indirizzare l'audio della chiamata
Utilizzo del livello API 28 o superiore (consigliato)
Indirizza l'audio della chiamata a un dispositivo Bluetooth disponibile utilizzando
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Utilizzo del livello API 23 e successivi
Attiva ROUTE_BLUETOOTH
senza specificare il dispositivo utilizzando setAudioRoute(int)
.
Per impostazione predefinita, viene eseguito il routing ai dispositivi Bluetooth attuali e attivi su Android 9 e versioni successive.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);