Questa guida spiega come indirizzare l'audio per i dispositivi Bluetooth utilizzando il API Telecom e imposta la connessione per Chiamate VoIP. Leggi Guida alla creazione di un'app per le chiamate prima di continuare.
Utilizzando il ConnectionService
e Connection
corsi, puoi accedere
lo stato dell'audio e un elenco di dispositivi Bluetooth disponibili e può indirizzare
audio a un dispositivo Bluetooth selezionato.
Connessione e servizio di connessione VoIP
Crea un corso VoIPConnection
che si estende da
Connection
Questa classe controlla lo stato della chiamata corrente. Come
Guida alla creazione di un'app per le chiamate
, impostala come applicazione autogestita e imposta la modalità audio per un VoIP
un'applicazione.
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); } }
Poi, restituisci un'istanza di questa classe in
ConnectionService
quando
in entrata 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 file manifest punti 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 questi Connection
e
ConnectionService
corsi, tu
puoi controllare quale dispositivo e quale tipo di routing audio vuoi utilizzare durante una
chiamata.
Recuperare lo stato audio attuale
Per ottenere lo stato audio corrente, chiama
getCallAudioState()
getCallAudioState()
restituisce se il dispositivo è in streaming tramite Bluetooth, Auricolare, Con cavo o
Altoparlante.
mAudioState = connection.getCallAudioState()
In stato modificato
Sottoscrivi le modifiche in CallAudioState eseguendo l'override
onCallAudioStateChanged()
Ti avvisa in caso di modifiche allo stato.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
Scarica il dispositivo attuale
Recupera il dispositivo attualmente attivo utilizzando
CallAudioState.getActiveBluetoothDevice()
Questa funzione restituisce il dispositivo Bluetooth attivo.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Scarica dispositivi Bluetooth
Visualizza un elenco di dispositivi Bluetooth disponibili per il routing dell'audio delle chiamate utilizzando
CallAudioState.getSupportedBluetoothDevices()
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
Instrada l'audio della chiamata
Utilizzo del livello API 28 o superiore (opzione consigliata)
Indirizza l'audio della chiamata a un dispositivo Bluetooth disponibile utilizzando
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
Utilizzo del livello API 23 o superiore
Attiva
ROUTE_BLUETOOTH
senza specificare il dispositivo
setAudioRoute(int)
.
L'impostazione predefinita prevede l'indirizzamento ai dispositivi Bluetooth attivi attuali su Android 9 e versioni successive.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);