Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico apresenta uma visão geral dos beacons publicitários Bluetooth Low Energy (LE) para aplicações Windows.
Importante
Deve declarar a funcionalidade "bluetooth" no Package.appxmanifest para usar esta funcionalidade.
<Capabilities> <DeviceCapability Name="bluetooth" /> </Capabilities>
- APIs importantes: Windows. Dispositivos.Bluetooth.Publicidade
Funcionalidades suportadas
Existem duas funcionalidades principais suportadas pelas APIs de Publicidade LE:
- Monitor de anúncios: ouvir beacons próximos e filtrá-los com base na carga útil ou na proximidade.
- Publicador de anúncios: define uma carga útil para o Windows publicar anúncios em nome dos programadores.
Configuração básica
Para usar a funcionalidade básica Bluetooth LE numa aplicação Plataforma Universal do Windows, deve verificar a funcionalidade Bluetooth no Package.appxmanifest.
- Open Package.appxmanifest
- Vá ao separador Capacidades
- Encontra Bluetooth na lista à esquerda e marca a caixa ao lado.
Publicação de Anúncios
Os anúncios Bluetooth LE permitem que o seu dispositivo transmita continuamente uma carga útil específica, designada por anúncio. Este anúncio pode ser visto por qualquer dispositivo Bluetooth LE nas proximidades, se estiverem configurados para ouvir este anúncio específico.
Note
Para a privacidade dos utilizadores, a vida útil do seu anúncio está ligada à da sua aplicação. Pode criar um BluetoothLEAdvertisementPublisher e chamar o método Start numa tarefa em segundo plano para efetuar anúncios em segundo plano. Para mais informações sobre tarefas em segundo plano, consulte Lançar, retomar e tarefas em segundo plano.
Existem muitas formas diferentes de adicionar dados a um anúncio. Este exemplo mostra uma forma comum de criar um anúncio específico para uma empresa.
Primeiro, crie o editor de anúncios que controla se o dispositivo está ou não a emitir um anúncio específico.
BluetoothLEAdvertisementPublisher publisher = new BluetoothLEAdvertisementPublisher();
Em segundo lugar, crie uma secção de dados personalizada. Este exemplo utiliza um valor CompanyId não atribuído 0xFFFE e adiciona o texto Hello World ao anúncio.
// Add custom data to the advertisement
var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;
var writer = new DataWriter();
writer.WriteString("Hello World");
// Make sure that the buffer length can fit within an advertisement payload (~20 bytes).
// Otherwise you will get an exception.
manufacturerData.Data = writer.DetachBuffer();
// Add the manufacturer data to the advertisement publisher:
publisher.Advertisement.ManufacturerData.Add(manufacturerData);
Agora que o publicador foi criado e configurado, pode chamar Start para iniciar a divulgação.
publisher.Start();
Fique atento aos anúncios
O código seguinte demonstra como criar um observador de anúncios Bluetooth LE, definir um callback e começar a ver todos os anúncios LE.
BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
watcher.Received += OnAdvertisementReceived;
watcher.Start();
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// Do whatever you want with the advertisement
}
Varredura ativa
Para receber também anúncios de resposta ao escanear, defina o seguinte após criar o observador. Note que isto causará maior consumo de energia e não está disponível em modo de fundo.
watcher.ScanningMode = BluetoothLEScanningMode.Active;
Fique atento a um padrão publicitário específico
Por vezes, queremos ouvir um anúncio específico. Neste caso, detete um anúncio que contenha uma carga útil com uma empresa fictícia (identificada como 0xFFFE) e a sequência Hello World no anúncio. Isto pode ser combinado com o exemplo de Publicação Básica para que uma máquina Windows anuncie e outra assista. Certifica-te de que defines este filtro de anúncios antes de iniciares o observador!
var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;
// Make sure that the buffer length can fit within an advertisement payload (~20 bytes).
// Otherwise you will get an exception.
var writer = new DataWriter();
writer.WriteString("Hello World");
manufacturerData.Data = writer.DetachBuffer();
watcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(manufacturerData);
Fique atento a um anúncio próximo
Por vezes, só se quer ativar o seu observador quando a publicidade do dispositivo estiver dentro do alcance. Podes definir o teu próprio intervalo, só tens de notar que os valores serão reduzidos entre 0 e -128.
// Set the in-range threshold to -70dBm. This means advertisements with RSSI >= -70dBm
// will start to be considered "in-range" (callbacks will start in this range).
watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;
// Set the out-of-range threshold to -75dBm (give some buffer). Used in conjunction
// with OutOfRangeTimeout to determine when an advertisement is no longer
// considered "in-range".
watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;
// Set the out-of-range timeout to be 2 seconds. Used in conjunction with
// OutOfRangeThresholdInDBm to determine when an advertisement is no longer
// considered "in-range"
watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000);
Distância de bitola
Quando o callback do seu Watcher Bluetooth LE é ativado, os eventArgs incluem um valor RSSI que indica a intensidade do sinal recebido (quão forte é o sinal Bluetooth).
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// The received signal strength indicator (RSSI)
Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}
Isto pode ser traduzido aproximadamente em distância, mas não deve ser usado para medir distâncias reais, pois cada rádio individual é diferente. Diferentes fatores ambientais podem dificultar a avaliação da distância (como paredes, caixas à volta do rádio ou até a humidade do ar).
Uma alternativa a avaliar a distância absoluta é definir "intervalos". Os rádios tendem a reportar 0 a -50 DBm quando estão muito próximos, -50 a -90 quando estão a uma distância média, e abaixo de -90 quando estão longe. A melhor forma de determinar como pretendes definir estes buckets para a tua aplicação é através de tentativa e erro.
Exemplo
Para um exemplo totalmente funcional de anúncios de Bluetooth LE, consulte, no GitHub, o Exemplo de anúncios de Bluetooth.
Windows developer