Editar

Share via


Preguntas más frecuentes de los desarrolladores de Bluetooth

Este artículo contiene respuestas a las preguntas más frecuentes sobre las API de Bluetooth para la UWP.

¿Qué API uso? Bluetooth Classic (RFCOMM) o Bluetooth low energy (GATT)?

Hay varias discusiones en línea en torno a este tema general, por lo que vamos a mantener esta respuesta de forma cuadrada en la diferencia con respecto a Windows. Estas son algunas instrucciones generales:

Bluetooth LE (Windows.Devices.Bluetooth.GenericAttributeProfile)

Use las API GATT cuando se comunique con un dispositivo que admita Bluetooth low energy. Si su caso de uso es poco frecuente, ancho de banda bajo o requiere poca energía, Bluetooth Low Energy es la respuesta. El espacio de nombres principal que incluye esta funcionalidad es Windows.Devices.Bluetooth.GenericAttributeProfile.

Cuándo no usar Bluetooth LE

  • Escenarios de ancho de banda alto y alta frecuencia. Si necesita mantener la sincronización constantemente con grandes cantidades de datos, considere la posibilidad de usar Bluetooth clásico o quizá incluso WiFi.

Bluetooth clásico (Windows.Devices.Bluetooth.Rfcomm)

Las API RFCOMM proporcionan a los desarrolladores un socket para realizar una comunicación bidireccional del estilo de puerto serie. Una vez que tenga un socket, los métodos para escribir y leer son bastante estándar. Se presenta una implementación de esto en el ejemplo de chat de Rfcomm.

Cuándo no usar Bluetooth Rfcomm

  • Notificaciones. El protocolo GATT de Bluetooth tiene un comando específico para esto y dará como resultado un consumo de energía significativamente menor y tiempos de respuesta más rápidos.
  • Comprobación de la detección de proximidad o presencia. Mejor usar las API de anuncios y conectarse a través de Bluetooth LE.

¿Por qué mi dispositivo Bluetooth LE deja de responder tras una desconexión?

La razón más común por la que esto ocurre es porque el dispositivo remoto ha perdido información de emparejamiento. Un gran número de dispositivos Bluetooth antiguos no requieren autenticación. Para proteger al usuario, todas las transacciones de emparejamiento realizadas desde la aplicación Configuración requerirán autenticación y algunos dispositivos no se diseñaron teniendo esto en cuenta.

A partir de Windows 10 versión 1511, los desarrolladores tienen control sobre el protocolo de enlace de emparejamiento. La Device enumeration and pairing sample (Muestra de enumeración y emparejamiento de dispositivos) detalla los diversos aspectos de la asociación de nuevos dispositivos.

En este ejemplo, iniciamos el emparejamiento con un dispositivo sin usar cifrado. Ten en cuenta que esto solo funcionará si el dispositivo remoto no requiere cifrado ni autenticación para funcionar.

// 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);

¿Tengo que emparejar los dispositivos Bluetooth antes de usarlos?

No tienes que emparejar dispositivos antes de usarlos si aprovechas Bluetooth RFCOMM (clásico). A partir de Windows 10, versión 1607, puedes simplemente consultar si hay dispositivos cercanos y conectarte a ellos. La RFCOMM Chat Sample (Muestra de chat de RFCOMM) actualizada muestra esta funcionalidad.

(14393 y versiones posteriores) Esta característica no está disponible para Bluetooth low energy (GATT Client), por lo que todavía tendrás que emparejar a través de la página Configuración o usando las API Windows.Devices.Enumeration para acceder a estos dispositivos.

(15030 y versiones posteriores) Ya no es necesario emparejar dispositivos Bluetooth. Use las nuevas API asincrónicas como GetGattServicesAsync y GetCharacteristicsAsync para consultar el estado actual del dispositivo remoto. Consulte los documentos de cliente para obtener más detalles.

¿Cuándo debo emparejar con un dispositivo antes de comunicarse con él?

Por lo general, si necesita un vínculo de confianza y a largo plazo con un dispositivo, adíle al dirigir al usuario a la página de configuración o mediante las API de enumeración de dispositivos y emparejamiento. Si simplemente necesita leer información del dispositivo que se expone públicamente (un sensor de temperatura o baliza), conecte o escuche anuncios sin realizar ningún esfuerzo para emparejarse con el dispositivo. Esto evitará problemas de interoperabilidad a largo plazo, ya que un gran número de dispositivos no admiten el emparejamiento.

¿Todos los dispositivos Windows admiten el rol periférico?

No. Se trata de una característica dependiente del hardware, pero se proporciona un método, BluetoothAdapter.IsPeripheralRoleSupported, para consultar si se admite o no. Los dispositivos admitidos actualmente incluyen Windows Phone en 8992+ y RPi3 (Windows IoT).

¿Puedo acceder a estas API desde Win32?

Sí, todas estas API deben funcionar. En este blog se detalla la manera de llamar a las API de Windows desde aplicaciones de escritorio.

¿Se supone que esta funcionalidad existe en una SKU específica?

Bluetooth LE: Sí, toda la funcionalidad está en OneCore y debe estar disponible en los dispositivos más recientes con una pila Bluetooth LE funcional.

Advertencia: El rol periférico depende del hardware y algunas ediciones de Windows Server no admiten Bluetooth.

Bluetooth BR/EDR (clásico): existen algunas variaciones, pero en su mayoría tienen compatibilidad con el nivel de perfil muy similar. Consulte los documentos en RFCOMM y estos documentos de perfil compatibles para PC y Teléfono