Dieser Artikel enthält Antworten auf häufig gestellte WinRT Bluetooth API-Fragen.
Welche APIs verwende ich? Bluetooth Classic (RFCOMM) oder Bluetooth Low Energy (GATT)?
Im Internet gibt es zahlreiche Diskussionen zu diesem allgemeinen Thema, daher beschränken wir uns in dieser Antwort ganz auf den Unterschied im Hinblick auf Windows. Hier sind einige allgemeine Richtlinien:
Bluetooth LE (Windows. Devices.Bluetooth.GenericAttributeProfile)
Verwenden Sie die GATT-APIs, wenn Sie mit einem Gerät kommunizieren, das Bluetooth Low Energy unterstützt. Wenn Ihr Anwendungsfall selten, geringe Bandbreite oder geringe Energie erfordert, ist Bluetooth Low Energy die Antwort. Der Hauptnamespace, der diese Funktionalität enthält, ist Windows.Devices.Bluetooth.GenericAttributeProfile.
Wann nicht Bluetooth LE verwendet werden soll
- Szenarien mit hoher Bandbreite, hoher Frequenz. Wenn Sie ständig mit großen Datenmengen synchronisiert werden müssen, sollten Sie bluetooth classic oder vielleicht sogar WLAN verwenden.
Bluetooth Classic (Windows.Devices.Bluetooth.Rfcomm)
Die RFCOMM-APIs bieten Entwicklern einen Socket, um eine bidirektionale serielle Port-Stil-Kommunikation durchzuführen. Sobald Sie über einen Socket verfügen, sind die Methoden zum Schreiben und Lesen ziemlich standard. Eine Implementierung dieser Vorgehensweise wird im Rfcomm-Chatbeispiel vorgestellt.
Wann nicht bluetooth Rfcomm verwendet werden soll
- Benachrichtigungen. Das Bluetooth GATT-Protokoll verfügt über einen speziellen Befehl dafür und führt zu deutlich weniger Stromschub und schnelleren Reaktionszeiten.
- Prüfen auf Näherungs- oder Präsenzerkennung. Besser, um die Ankündigungs-APIs zu verwenden und über Bluetooth LE eine Verbindung herzustellen.
Warum reagiert mein Bluetooth LE-Gerät nach einer Trennung nicht mehr?
Der häufigste Grund hierfür ist, dass das Remotegerät Kopplungsinformationen verloren hat. Eine große Anzahl älterer Bluetooth-Geräte erfordert keine Authentifizierung. Um den Benutzer zu schützen, benötigen alle aus den Windows-Einstellungen ausgeführten Kopplungstransaktionen eine Authentifizierung, und einige Geräte wurden nicht so konzipiert.
Ab Windows 10, Version 1511, können Entwickler den Kopplungshandshake steuern. Im Beispiel "Geräteaufzählung" und "Kopplung " werden die verschiedenen Aspekte der Zuordnung neuer Geräte beschrieben.
In diesem Beispiel wird die Kopplung mit einem Gerät ohne Verschlüsselung initiiert. Beachten Sie, dass dies nur funktioniert, wenn für das Remotegerät keine Verschlüsselung oder Authentifizierung erforderlich ist.
// 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);
Muss ich Bluetooth-Geräte koppeln, bevor ich sie verwende?
Sie müssen Geräte nicht koppeln, bevor Sie sie verwenden, wenn Sie Bluetooth RFCOMM (klassisch) nutzen. Ab Windows 10 Release 1607 können Sie einfach nach Geräten in der Nähe abfragen und eine Verbindung mit diesen herstellen. Das aktualisierte RFCOMM-Chatbeispiel zeigt diese Funktionalität.
(14393 und darunter) Dieses Feature ist für Bluetooth Low Energy (GATT-Client) nicht verfügbar, sodass Sie weiterhin über die Seite "Einstellungen" oder die Windows.Devices.Enumeration-APIs koppeln müssen, um auf diese Geräte zuzugreifen.
(15030 und höher) Das Koppeln von Bluetooth-Geräten ist nicht mehr erforderlich. Verwenden Sie die neuen Async-APIs wie GetGattServicesAsync und GetCharacteristicsAsync, um den aktuellen Zustand des Remotegeräts abzufragen. Weitere Informationen finden Sie in den Clientdokumenten .
Wann sollte ich ein Gerät koppeln, bevor ich mit ihm kommuniziere?
Wenn Sie eine vertrauenswürdige, langfristige Bindung mit einem Gerät benötigen, koppeln Sie sie, indem Sie den Benutzer entweder auf die Einstellungsseite leiten oder die APIs für Geräteaufzählung und Kopplung verwenden. Wenn Sie einfach nur Informationen von einem Gerät lesen müssen, das öffentlich zugänglich ist (z. B. ein Temperatursensor oder Beacon), dann stellen Sie eine Verbindung her oder horchen Sie auf Advertisements, ohne zu versuchen, das Gerät zu koppeln. Dies verhindert langfristig Interoperabilitätsprobleme, da eine große Anzahl von Geräten die Kopplung nicht unterstützt.
Unterstützen alle Windows-Geräte die Peripherierolle?
Nein Dies ist ein hardwareabhängiges Feature, aber eine Methode wird bereitgestellt, BluetoothAdapter.IsPeripheralRoleSupported, um abzufragen, ob sie unterstützt wird. Derzeit unterstützte Geräte umfassen Windows Phone unter 8992+ und RPi3 (Windows IoT).
Kann ich über Win32 auf diese APIs zugreifen?
Ja, all diese APIs sollten funktionieren. In diesem Blog wird beschrieben, wie Windows-APIs aus Desktopanwendungen aufgerufen werden.
Soll diese Funktionalität auf einer bestimmten SKU vorhanden sein?
Bluetooth LE: Ja, alle Funktionen befinden sich in OneCore und sollten auf den neuesten Geräten mit einem funktionierenden Bluetooth LE-Stapel verfügbar sein.
Vorbehalt: Die Peripherierolle ist hardwareabhängig, und einige Windows Server-Editionen unterstützen Bluetooth nicht.
Bluetooth BR/EDR (Klassisch): Einige Variationen sind zwar vorhanden, haben jedoch meist eine sehr ähnliche Profilebenenunterstützung. Weitere Informationen zu RFCOMM und diesem unterstützten Profildokument für PC