Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet ger en översikt över annonsfyrar för Bluetooth Low Energy (LE) för Windows-appar.
Important
Du måste deklarera funktionen "bluetooth" i Package.appxmanifest för att kunna använda den här funktionen.
<Capabilities> <DeviceCapability Name="bluetooth" /> </Capabilities>
- Viktiga API:er:Windows.Devices.Bluetooth.Advertisement
Funktioner som stöds
Det finns två huvudfunktioner som stöds av API:erna för LE-annonsering:
- Annons Watcher: lyssna efter närliggande beacons och filtrera ut dem baserat på nyttolast eller närhet.
- Advertisement Publisher: definiera en nyttolast för Windows att annonsera åt utvecklare.
Grundläggande installation
Om du vill använda grundläggande Bluetooth LE-funktioner i en Universell Windows-plattform-app måste du kontrollera Bluetooth-funktionen i Package.appxmanifest.
- Öppna Package.appxmanifest
- Gå till fliken Funktioner
- Leta upp Bluetooth i listan till vänster och markera kryssrutan bredvid den.
Publicera annonser
Bluetooth LE-annonsering gör det möjligt för din enhet att ständigt sända ut en specifik nyttolast som kallas en annons. Den här annonsen kan ses av alla närliggande Bluetooth LE-kompatibla enheter, om de har konfigurerats för att lyssna efter den här specifika annonsen.
Note
För användarnas integritet är livslängden för din annons kopplad till appens. Du kan skapa en BluetoothLEAdvertisementPublisher och anropa Start i en bakgrundsuppgift för att annonsera i bakgrunden. Mer information om bakgrundsaktiviteter finns i Starta, återuppta och bakgrundsaktiviteter.
Det finns många olika sätt att lägga till data i en annons. Det här exemplet visar ett vanligt sätt att skapa en företagsspecifik annons.
Börja med att skapa annonsutgivaren som styr om enheten kör ut en specifik annons eller inte.
BluetoothLEAdvertisementPublisher publisher = new BluetoothLEAdvertisementPublisher();
För det andra skapar du ett anpassat dataavsnitt. I det här exemplet används ett otilldelat CompanyId värde 0xFFFE och lägger till texten Hello World i annonsen.
// 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);
Nu när utgivaren har skapats och konfigurerats kan du anropa Start för att börja annonsera.
publisher.Start();
Titta efter annonser
Följande kod visar hur du skapar en Bluetooth LE-annonsskådare, ställer in ett återanrop och börjar titta efter alla LE-annonser.
BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
watcher.Received += OnAdvertisementReceived;
watcher.Start();
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// Do whatever you want with the advertisement
}
Aktiv genomsökning
Om du även vill ta emot annonseringssvar på skanningar anger du följande när du har skapat bevakaren. Observera att detta orsakar större strömavlopp och inte är tillgängligt i bakgrundslägen.
watcher.ScanningMode = BluetoothLEScanningMode.Active;
Titta efter ett specifikt annonsmönster
Ibland vill du lyssna efter en specifik annons. I det här fallet ska du lyssna efter ett annonseringspaket som innehåller en nyttolast med ett påhittat företag (identifierat som 0xFFFE) och strängen Hello World. Detta kan kombineras med exemplet Basic Publishing så att en Windows-dator annonserar och en annan övervakar. Se till att ange det här annonsfiltret innan du startar bevakaren!
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);
Titta efter en annons i närheten
Ibland vill du bara utlösa din övervakare när enhetens annonssignal kommer inom räckhåll. Du kan definiera ditt eget intervall, observera bara att värdena kommer att klipps till mellan 0 och -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);
Mätaravstånd
När din Bluetooth LE Watcher-motringning utlöses innehåller eventArgs ett RSSI-värde som anger den mottagna signalstyrkan (hur stark Bluetooth-signalen är).
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
// The received signal strength indicator (RSSI)
Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}
Detta kan grovt översättas till avstånd, men bör inte användas för att mäta sanna avstånd eftersom varje enskild radio är annorlunda. Olika miljöfaktorer kan göra avståndet svårt att mäta (till exempel väggar, fall runt radion eller till och med luftfuktighet).
Ett alternativ till att bedöma rent avstånd är att definiera "buckets". Radioapparater tenderar att rapportera 0 till -50 DBm när de är mycket nära, -50 att -90 när de är en medeldistans bort och under -90 när de är långt borta. Det bästa sättet att avgöra vad du vill att dessa bucketar ska vara i din app är att pröva sig fram.
Example
Ett fullständigt funktionellt exempel på Bluetooth LE-annonser finns i Bluetooth Advertisement Sample på Github.
Windows developer