Perguntas frequentes sobre o desenvolvedor Bluetooth

Este artigo contém respostas às perguntas mais frequentes sobre a API Bluetooth do WinRT.

Que APIs utilizo? Bluetooth Classic (RFCOMM) ou Bluetooth Low Energy (GATT)?

Há várias discussões online sobre este tema em geral, por isso vamos centrar esta resposta especificamente na diferença relativamente ao Windows. Aqui estão algumas diretrizes gerais:

Bluetooth LE (Windows. Devices.Bluetooth.GenericAttributeProfile)

Use as APIs do GATT quando estiver se comunicando com um dispositivo que suporte Bluetooth Low Energy. Se o seu caso de uso é pouco frequente, baixa largura de banda ou requer pouca energia, Bluetooth Low Energy é a resposta. O namespace principal que inclui essa funcionalidade é Windows.Devices.Bluetooth.GenericAttributeProfile.

Quando não usar Bluetooth LE

  • Cenários de alta largura de banda, alta frequência. Se você precisa manter constantemente a sincronização com grandes quantidades de dados, considere usar Bluetooth clássico ou talvez até mesmo WiFi.

Bluetooth Clássico (Windows.Devices.Bluetooth.Rfcomm)

As APIs RFCOMM oferecem aos desenvolvedores um soquete para executar comunicação bidirecional no estilo de porta serial. Uma vez que você tem um soquete, os métodos para escrever e ler são bastante padrão. Uma implementação disso é apresentada no exemplo de Chat Rfcomm.

Quando não usar Bluetooth Rfcomm

  • Notificações. O protocolo Bluetooth GATT tem um comando específico para isso e resultará em significativamente menos consumo de energia e tempos de resposta mais rápidos.
  • Verificação de proximidade ou deteção de presença. É melhor usar as APIs de publicidade e ligar-se por Bluetooth LE.

Porque é que o meu dispositivo Bluetooth LE deixa de responder após uma desligação?

A razão mais comum pela qual isso ocorre é porque o dispositivo remoto perdeu informações de emparelhamento. Um grande número de dispositivos Bluetooth mais antigos não requer autenticação. Para proteger o usuário, todas as transações de emparelhamento realizadas a partir das Configurações do Windows exigirão autenticação, e alguns dispositivos não foram projetados com isso em mente.

A partir do Windows 10 versão 1511, os desenvolvedores têm controle sobre o handshake de emparelhamento. O exemplo de enumeração e emparelhamento de dispositivos detalha os vários aspetos da associação de novos dispositivos.

Neste exemplo, iniciamos o emparelhamento com um dispositivo sem criptografia. Observe que isso só funcionará se o dispositivo remoto não exigir criptografia ou autenticação 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);

Tenho de emparelhar dispositivos Bluetooth antes de os utilizar?

Você não precisa emparelhar dispositivos antes de usá-los se aproveitar Bluetooth RFCOMM (clássico). A partir do Windows 10 versão 1607, você pode simplesmente consultar dispositivos próximos e conectar-se a eles. O exemplo de bate-papo RFCOMM atualizado mostra essa funcionalidade.

(14393 e inferior) Este recurso não está disponível para Bluetooth Low Energy (GATT Client), portanto, você ainda terá que emparelhar através da página Configurações ou usando as APIs Windows.Devices.Enumeration para acessar esses dispositivos.

(15030 e superior) O emparelhamento de dispositivos Bluetooth já não é necessário. Use as novas APIs Assíncronas, como GetGattServicesAsync e GetCharacteristicsAsync, para consultar o estado atual do dispositivo remoto. Consulte os documentos do Cliente para obter mais detalhes.

Quando devo emparelhar com um dispositivo antes de me comunicar com ele?

Geralmente, se você precisar de um vínculo confiável e de longo prazo com um dispositivo, emparelhe com ele direcionando o usuário para a página de configurações ou usando as APIs de enumeração e emparelhamento de dispositivos. Se você simplesmente precisa ler informações do dispositivo que está exposto publicamente (um sensor de temperatura ou beacon), conecte-se ou ouça anúncios sem fazer qualquer esforço para emparelhar com o dispositivo. Isso evitará problemas de interoperabilidade a longo prazo, porque um grande número de dispositivos não suporta emparelhamento.

Todos os dispositivos Windows suportam a Função Periférica?

No. Este é um recurso dependente de hardware, mas um método é fornecido, BluetoothAdapter.IsPeripheralRoleSupported, para consultar se ele é suportado ou não. Os dispositivos atualmente suportados incluem Windows Phone em 8992+ e RPi3 (Windows IoT).

Posso acessar essas APIs do Win32?

Sim, todas essas APIs devem funcionar. Este blog detalha a maneira de chamar APIs do Windows a partir de aplicativos da área de trabalho.

Essa funcionalidade deve existir em uma SKU específica?

Bluetooth LE: Sim, todas as funcionalidades estão no OneCore e devem estar disponíveis nos dispositivos mais recentes com uma pilha Bluetooth LE funcional.

Advertência: A função periférica depende de hardware e algumas edições do Windows Server não suportam Bluetooth.

Bluetooth BR / EDR (Clássico): Existem algumas variações, mas principalmente, eles têm suporte de nível de perfil muito semelhante. Consulte a documentação no RFCOMM e este documento de perfil suportado para PC