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.
class VoIPConnection : Connection() {
init {
setConnectionProperties(PROPERTY_SELF_MANAGED)
setAudioModeIsVoip(true)
}
}
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.
class VoIPConnectionService : ConnectionService() {
override fun onCreateOutgoingConnection(
connectionManagerPhoneAccount: PhoneAccountHandle,
request: ConnectionRequest,
): Connection {
return VoIPConnection()
}
}
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.
fun onCallAudioStateChanged(audioState: CallAudioState) {
mAudioState = audioState
}
@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.
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
Scarica dispositivi Bluetooth
Visualizza un elenco di dispositivi Bluetooth disponibili per il routing dell'audio delle chiamate utilizzando
CallAudioState.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);