Den här artikeln innehåller svar på vanliga frågor om WinRT Bluetooth API.
Vilka API:er använder jag? Bluetooth Classic (RFCOMM) eller Bluetooth Low Energy (GATT)?
Det finns olika diskussioner online kring det här allmänna ämnet så låt oss hålla det här svaret rakt på skillnaden med avseende på Windows. Här följer några allmänna riktlinjer:
Bluetooth LE (Windows. Devices.Bluetooth.GenericAttributeProfile)
Använd GATT-API:erna när du kommunicerar med en enhet som stöder Bluetooth Low Energy. Om ditt användningsfall är ovanligt, har låg bandbredd eller kräver låg effekt är Bluetooth Low Energy svaret. Huvudnamnområdet som innehåller den här funktionen är Windows.Devices.Bluetooth.GenericAttributeProfile.
När du inte ska använda Bluetooth LE
- Scenarier med hög bandbredd och hög frekvens. Om du ständigt behöver synkronisera med stora mängder data kan du överväga att använda klassisk Bluetooth eller kanske till och med WiFi.
Bluetooth Classic (Windows.Devices.Bluetooth.Rfcomm)
RFCOMM-API:erna ger utvecklare en socket för att utföra dubbelriktad seriell kommunikation i portformat. När du har en socket är metoderna för att skriva och läsa ganska standard. En implementering av detta presenteras i Rfcomm Chat-exemplet.
När du inte ska använda Bluetooth Rfcomm
- Meddelanden. Bluetooth GATT-protokollet har ett specifikt kommando för detta och resulterar i betydligt mindre strömdragning och snabbare svarstider.
- Söker efter närhets- eller närvaroidentifiering. Bättre att använda api:er för annonsering och ansluta via Bluetooth LE.
Varför slutar min Bluetooth LE-enhet att svara efter en frånkoppling?
Den vanligaste orsaken till detta är att fjärrenheten har förlorat parkopplingsinformation. Ett stort antal äldre Bluetooth-enheter kräver inte autentisering. För att skydda användaren kräver alla parkopplingstransaktioner som utförs från Windows-inställningar autentisering och vissa enheter har inte utformats med detta i åtanke.
Från och med Windows 10, version 1511, kan utvecklare styra parkopplingshandskakningen. Exempel på enhetsuppräkning och parkoppling beskriver de olika aspekterna av att associera nya enheter.
I det här exemplet initierar vi parkoppling med en enhet utan kryptering. Observera att detta endast fungerar om fjärrenheten inte kräver kryptering eller autentisering för att fungera.
// 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);
Måste jag parkoppla Bluetooth-enheter innan jag använder dem?
Du behöver inte parkoppla enheter innan du använder dem om du använder Bluetooth RFCOMM (klassisk). Från och med Windows 10 version 1607 kan du bara fråga efter enheter i närheten och ansluta till dem. Det uppdaterade RFCOMM-chattexemplet visar den här funktionen.
(14393 och lägre) Den här funktionen är inte tillgänglig för Bluetooth Low Energy (GATT-klienten), så du måste fortfarande koppla antingen via sidan Inställningar eller använda API:er för Windows.Devices.Enumeration för att få åtkomst till dessa enheter.
(15030 och senare) Parkoppling av Bluetooth-enheter behövs inte längre. Använd de nya Async-API:erna som GetGattServicesAsync och GetCharacteristicsAsync för att fråga fjärrenhetens aktuella tillstånd. Mer information finns i klientdokumenten .
När ska jag parkoppla med en enhet innan jag kommunicerar med den?
Om du behöver ett betrott, långsiktigt band med en enhet kan du i allmänhet koppla med den genom att antingen dirigera användaren till inställningssidan eller använda API:er för enhetsuppräkning och parkoppling. Om du bara behöver läsa information från enheten som exponeras offentligt (en temperatursensor eller fyr) ansluter eller lyssnar du efter annonser utan att göra något för att koppla ihop med enheten. Detta förhindrar samverkansproblem på lång sikt eftersom ett stort antal enheter inte stöder parkoppling.
Har alla Windows-enheter stöd för perifer roll?
No. Det här är en maskinvaruberoende funktion, men en metod tillhandahålls, BluetoothAdapter.IsPeripheralRoleSupported, för att fråga om den stöds eller inte. Enheter som stöds för närvarande inkluderar Windows Phone på 8992+ och RPi3 (Windows IoT).
Kan jag komma åt dessa API:er från Win32?
Ja, alla dessa API:er bör fungera. Den här bloggen beskriver hur du anropar Windows-API:er från skrivbordsprogram.
Ska den här funktionen finnas på en specifik SKU?
Bluetooth LE: Ja, alla funktioner finns i OneCore och bör vara tillgängliga på de senaste enheterna med en fungerande Bluetooth LE-stack.
Obs! Peripheral Role är maskinvaruberoende och vissa utgåvor av Windows Server stöder inte Bluetooth.
Bluetooth BR/EDR (klassisk): Vissa varianter finns, men de har mestadels stöd på mycket liknande profilnivå. Se dokumenten på RFCOMM och det här profildokumentet som stöds för PC