Configura Bluetooth

Prima che la tua app possa comunicare tramite Bluetooth o Bluetooth Low Energy, devi verificare che il Bluetooth sia supportato dal dispositivo e, in caso affermativo, che sia attivato. Tieni presente che questo controllo è necessario solo se l'attributo android:required nella voce del file manifest <uses-feature.../> è impostato su false.

Se il Bluetooth non è supportato, devi disattivare correttamente tutte le funzionalità Bluetooth. Se il Bluetooth è supportato, ma è disattivato, puoi richiedere all'utente di attivare il Bluetooth senza uscire dall'app.

Il primo passaggio consiste nell'aggiungere le autorizzazioni Bluetooth al file manifest per poter utilizzare le API seguenti.

Una volta applicate le autorizzazioni, la configurazione del Bluetooth viene compiuta in due passaggi utilizzando BluetoothAdapter:

  1. Scarica BluetoothAdapter.

    Il BluetoothAdapter è necessario per tutte le attività Bluetooth. BluetoothAdapter rappresenta l'adattatore Bluetooth del dispositivo (la radio Bluetooth). Per ricevere un BluetoothAdapter, devi prima avere un Context. Utilizza questo contesto per ottenere un'istanza del servizio di sistema BluetoothManager. La chiamata a BluetoothManager#getAdapter ti fornirà un oggetto BluetoothAdapter. Se getAdapter() restituisce null, il dispositivo non supporta il Bluetooth.

    Ecco alcuni esempi:

    Kotlin

    val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java)
    val bluetoothAdapter: BluetoothAdapter? = bluetoothManager.getAdapter()
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    

    Java

    BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class);
    BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    
  2. Attiva Bluetooth.

    Dopodiché devi assicurarti che il Bluetooth sia attivo. Chiama il numero isEnabled() per verificare se il Bluetooth è attualmente attivo. Se questo metodo restituisce false, il Bluetooth è disattivato. Per richiedere l'attivazione del Bluetooth, chiama startActivityForResult() e trasmetti un'azione dell'intent ACTION_REQUEST_ENABLE. Con questa chiamata viene inviata una richiesta di attivazione del Bluetooth tramite le impostazioni di sistema (senza interrompere l'app).

    Ecco alcuni esempi:

    Kotlin

    if (bluetoothAdapter?.isEnabled == false) {
      val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }
    

    Java

    if (!bluetoothAdapter.isEnabled()) {
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    

Viene visualizzata una finestra di dialogo che richiede l'autorizzazione dell'utente per attivare il Bluetooth, come mostrato nella Figura 1. Se l'utente concede l'autorizzazione, il sistema inizia ad attivare il Bluetooth e lo stato attivo torna sulla tua app al termine (o non riuscito) del processo.


Figura 1. La finestra di dialogo per l'attivazione del Bluetooth.

La costante REQUEST_ENABLE_BT passata a startActivityForResult() è un numero intero definito a livello locale che deve essere maggiore o uguale a 0. Il sistema ti restituisce questa costante nella tua implementazione di onActivityResult() sotto forma di parametro requestCode.

Se l'attivazione del Bluetooth ha esito positivo, la tua attività riceve il codice risultato RESULT_OK nel callback onActivityResult(). Se il Bluetooth non è stato attivato a causa di un errore (o l'utente ha risposto "Rifiuta"), il codice risultato è RESULT_CANCELED.

Facoltativamente, l'app può anche ascoltare l'intent di trasmissione ACTION_STATE_CHANGED, che il sistema trasmette ogni volta che lo stato Bluetooth cambia. Questa trasmissione contiene i campi aggiuntivi EXTRA_STATE e EXTRA_PREVIOUS_STATE, contenenti rispettivamente il nuovo e il vecchio stato Bluetooth. I valori possibili per questi campi aggiuntivi sono STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF e STATE_OFF. L'ascolto di questa trasmissione può essere utile se l'app deve rilevare le modifiche di runtime apportate allo stato Bluetooth.

Suggerimento: l'attivazione della rilevabilità attiva automaticamente il Bluetooth. Se prevedi di attivare in modo coerente la rilevabilità del dispositivo prima di eseguire l'attività Bluetooth, puoi saltare il passaggio 2 dei passaggi precedenti.

Una volta attivato il Bluetooth sul dispositivo, puoi utilizzare sia il Bluetooth classico sia il Bluetooth Low Energy.

Per Bluetooth classico, puoi trovare dispositivi Bluetooth e connetterti a dispositivi Bluetooth.

Per Bluetooth Low Energy, puoi trovare i dispositivi BLE, connetterti a un server GATT e trasferire dati BLE.