Editar

Compartir a través de


Preguntas más frecuentes sobre el desarrollador de Bluetooth

Este artículo contiene respuestas a las preguntas más frecuentes sobre la API bluetooth para 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 directamente sobre 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 baja potencia, 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 alta frecuencia y ancho de banda alto. Si necesita mantener la sincronización constante 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 de estilo de puerto serie bidireccional. 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 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 anuncio y conectarse a través de Bluetooth LE.

¿Por qué mi dispositivo Bluetooth LE deja de responder después de 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 la versión 1511 de Windows 10, los desarrolladores tienen control sobre el protocolo de enlace de emparejamiento. El ejemplo de enumeración y emparejamiento de dispositivos detalla los distintos aspectos de la asociación de nuevos dispositivos.

En este ejemplo, iniciamos el emparejamiento con un dispositivo sin cifrado. Tenga 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 dispositivos Bluetooth antes de usarlos?

No tienes que emparejar dispositivos antes de usarlos si aprovechas Bluetooth RFCOMM (clásico). A partir de la versión 1607 de Windows 10, puedes consultar simplemente los dispositivos cercanos y conectarlos. El ejemplo de chat RFCOMM actualizado muestra esta funcionalidad.

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

(15030 y versiones posteriores) El emparejamiento de dispositivos Bluetooth ya no es necesario. 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 información.

¿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 y emparejamiento de dispositivos. 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 admite 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 es compatible o no. Los dispositivos compatibles 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