Domande frequenti per sviluppatori Bluetooth

Questo articolo contiene le risposte alle domande frequenti sulle API Bluetooth UWP.

Quali API si usano? Bluetooth Classico (RFCOMM) o Bluetooth Low Energy (GATT)?

Ci sono varie discussioni online su questo argomento generale, quindi teniamo questa risposta al quadrato sulla differenza rispetto a Windows. Ecco alcune linee guida generali:

Bluetooth LE (Windows.Devices.Bluetooth.GenericAttributeProfile)

Usare le API GATT quando si comunica con un dispositivo che supporta Bluetooth Low Energy. Se il caso d'uso è poco frequente, bassa larghezza di banda o richiede un basso consumo di energia, Bluetooth Low Energy è la risposta. Lo spazio dei nomi principale che include questa funzionalità è Windows.Devices.Bluetooth.GenericAttributeProfile.

Quando non usare Bluetooth LE

  • Larghezza di banda elevata, scenari ad alta frequenza. Se è necessario mantenere costantemente la sincronizzazione con grandi quantità di dati, prendere in considerazione l'uso di Bluetooth classico o forse anche Wi-Fi.

Bluetooth classico (Windows.Devices.Bluetooth.Rfcomm)

Le API RFCOMM offrono agli sviluppatori un socket per eseguire comunicazioni bidirezionali in stile porta seriale. Una volta ottenuto un socket, i metodi per la scrittura e la lettura sono abbastanza standard. Un'implementazione di questa operazione viene presentata nell'esempio di Chat Rfcomm.

Quando non usare Bluetooth Rfcomm

  • Notifiche. Il protocollo GATT Bluetooth ha un comando specifico per questo e comporterà un risparmio di energia significativamente inferiore e tempi di risposta più rapidi.
  • Verifica della prossimità o del rilevamento della presenza. Meglio usare le API Di annuncio e connettersi tramite Bluetooth LE.

Perché il dispositivo Bluetooth LE smette di rispondere dopo una disconnessione?

Il motivo più comune è che il dispositivo remoto ha perso informazioni di associazione. Un numero elevato di dispositivi Bluetooth meno recenti non richiede l'autenticazione. Per proteggere l'utente, tutte le transazioni di associazione eseguite dall'applicazione Impostazioni richiederanno l'autenticazione e alcuni dispositivi non sono stati progettati tenendo presente questo aspetto.

A partire da Windows 10 versione 1511, gli sviluppatori hanno il controllo sull'handshake di associazione. L'esempio di enumerazione e associazione dei dispositivi illustra in dettaglio i vari aspetti dell'associazione di nuovi dispositivi.

In questo esempio viene avviata l'associazione a un dispositivo senza crittografia. Si noti che funzionerà solo se il dispositivo remoto non richiede la crittografia o l'autenticazione.

// Get ceremony type and protection level selections
// You must select at least ConfirmOnly or the pairing attempt will fail
    DevicePairingKinds ceremonySelected = DevicePairingKinds.ConfirmOnly;

//  Workaround remote devices losing pairing information
    DevicePairingProtectionLevel protectionLevel = DevicePairingProtectionLevel.None

    DeviceInformationCustomPairing customPairing = deviceInfoDisp.DeviceInformation.Pairing.Custom;

// Declare an event handler - you don't need to do much in PairingRequestedHandler since the ceremony is "None"
    customPairing.PairingRequested += PairingRequestedHandler;
    DevicePairingResult result = await customPairing.PairAsync(ceremonySelected, protectionLevel);

È necessario associare i dispositivi Bluetooth prima di usarli?

Non è necessario associare i dispositivi prima di usarli se si usa Bluetooth RFCOMM (versione classica). A partire da Windows 10 versione 1607, puoi semplicemente eseguire query per i dispositivi nelle vicinanze e connetterti a essi. L'esempio di chat RFCOMM aggiornato mostra questa funzionalità.

(14393 e versioni successive) Questa funzionalità non è disponibile per Bluetooth Low Energy (CLIENT GATT), quindi dovrai comunque associarla tramite la pagina Impostazioni o usando le API Windows.Devices.Enumeration per accedere a questi dispositivi.

(15030 e versioni successive) L'associazione di dispositivi Bluetooth non è più necessaria. Usare le nuove API asincrone come GetGattServicesAsync e GetCharacteristicsAsync per eseguire query sullo stato corrente del dispositivo remoto. Per altri dettagli, vedere la documentazione client.

Quando è necessario associare un dispositivo prima di comunicare con esso?

In genere, se è necessario un legame a lungo termine attendibile con un dispositivo, associarlo indirizzando l'utente alla pagina delle impostazioni o usando le API di enumerazione del dispositivo e associazione. Se è sufficiente leggere le informazioni dal dispositivo esposto pubblicamente (un sensore di temperatura o un beacon), connettersi o ascoltare gli annunci senza fare alcun sforzo per associare il dispositivo. In questo modo si evitano problemi di interoperabilità a lungo termine, perché un numero elevato di dispositivi non supporta l'associazione.

Tutti i dispositivi Windows supportano il ruolo periferiche?

No. Si tratta di una funzionalità dipendente dall'hardware, ma viene fornito un metodo, BluetoothAdapter.IsPeripheralRoleSupported, per eseguire una query se è supportata o meno. I dispositivi attualmente supportati includono Windows Phone su 8992+ e RPi3 (Windows IoT).

È possibile accedere a queste API da Win32?

Sì, tutte queste API dovrebbero funzionare. Questo blog illustra in dettaglio il modo in cui chiamare le API Di Windows dalle applicazioni desktop.

Questa funzionalità dovrebbe esistere in uno SKU specifico?

Bluetooth LE: Sì, tutte le funzionalità si trovano in OneCore e devono essere disponibili nei dispositivi più recenti con uno stack Bluetooth LE funzionante.

Avvertenza: il ruolo periferica è dipendente dall'hardware e alcune edizioni di Windows Server non supportano Bluetooth.

Bluetooth BR/EDR (versione classica): alcune varianti esistono, ma per lo più, hanno un supporto molto simile a livello di profilo. Vedere la documentazione su RFCOMM e questi documenti di profilo supportati per PC e telefono