Perguntas frequentes sobre desenvolvedores de Bluetooth

Este artigo contém respostas para perguntas frequentes sobre a API Bluetooth UWP.

Quais APIs eu uso? Bluetooth Classic (RFCOMM) ou Bluetooth Low Energy (GATT)?

Existem várias discussões online em torno desse tópico geral, então vamos manter essa resposta diretamente sobre a diferença em relação ao Windows. Estas são algumas diretrizes gerais:

Bluetooth LE (Windows.Devices.Bluetooth.GenericAttributeProfile)

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

Quando não usar o Bluetooth LE

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

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

As APIs RFCOMM fornecem aos desenvolvedores um soquete para executar comunicação bidirecional no estilo de porta serial. Depois de ter um soquete, os métodos para escrever e ler são bastante padrão. Uma implementação disso é apresentada no exemplo do Rfcomm Chat.

Quando não usar o 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 detecção de proximidade ou presença. Melhor usar as APIs de anúncio e conectar-se por Bluetooth LE.

Por que meu dispositivo Bluetooth LE para de responder após uma desconexão?

O motivo mais comum pelo qual isso ocorre é porque o dispositivo remoto perdeu as 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 no aplicativo Configurações 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 aspectos 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);

Preciso emparelhar dispositivos Bluetooth antes de usá-los?

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

(14393 e abaixo) Esse recurso não está disponível para Bluetooth Low Energy (Cliente GATT), portanto, você ainda precisará emparelhar por meio da página Configurações ou usando as APIs Windows.Devices.Enumeration para acessar esses dispositivos.

(15030 e acima) O emparelhamento de dispositivos Bluetooth não é mais 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 precisar ler as informações do dispositivo expostas publicamente (um sensor de temperatura ou beacon), conecte-se ou ouça anúncios sem fazer nenhum esforço para emparelhar com o dispositivo. Isso evitará problemas de interoperabilidade a longo prazo, porque um grande número de dispositivos não oferece suporte ao emparelhamento.

Todos os dispositivos Windows dão suporte à função periférica?

Não. Esse é um recurso dependente de hardware, mas um método é fornecido, BluetoothAdapter.IsPeripheralRoleSupported, para consultar se há suporte 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 um SKU específico?

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

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

Bluetooth BR/EDR (Clássico): Existem algumas variações, mas principalmente têm suporte de nível de perfil muito semelhante. Consulte os documentos sobre RFCOMM e estes documentos de perfil suportados para PC e telefone