この記事には、よく寄せられる UWP Bluetooth API に関する質問に対する回答が含まれています。
どのような API を使用しますか? Bluetooth クラシック (RFCOMM) または Bluetooth Low Energy (GATT)?
この一般的なトピックについては、オンラインでさまざまな議論が行われます。そのため、Windows に関する違いについて、この回答を正面から見ていきましょう。 一般的なガイドラインを次に示します。
Bluetooth LE (Windows.Devices.Bluetooth.GenericAttributeProfile)
Bluetooth低エネルギーをサポートするデバイスと通信する場合は、GATT API を使用します。 ユース ケースが頻度が低い、帯域幅が低い、または低電力が必要な場合は、Bluetooth低エネルギーが答えです。 この機能を含む主な名前空間は 、Windows.Devices.Bluetooth.GenericAttributeProfile です。
Bluetooth LE を使用しない場合
- 高帯域幅、高周波数のシナリオ。 大量のデータとの同期を常に維持する必要がある場合は、クラシックBluetooth使用することを検討してください。
Bluetooth クラシック (Windows.Devices.Bluetooth.Rfcomm)
RFCOMM API は、双方向のシリアル ポート 形式の通信を実行するソケットを開発者に提供します。 ソケットを取得したら、書き込みと読み取りの方法はかなり標準的です。 この実装は 、Rfcomm チャット サンプルに示されています。
Rfcomm Bluetooth使用しない場合
- 通知。 Bluetooth GATT プロトコルにはこれに対する特定のコマンドがあり、消費電力が大幅に少なくなり、応答時間が短縮されます。
- 近接性またはプレゼンス検出の確認。 アドバタイズメント API を使用し、BLUETOOTH LE 経由で接続することをお勧めします。
Bluetooth LE デバイスが切断後に応答を停止する理由
これが発生する最も一般的な理由は、リモート デバイスがペアリング情報を失ったためです。 古いBluetoothデバイスの数が多い場合、認証は必要ありません。 ユーザーを保護するために、Windows 設定から実行されるすべてのペアリング トランザクションには認証が必要であり、一部のデバイスではこれを念頭に置いて設計されていませんでした。
Windows 10 リリース 1511 以降、開発者はペアリング ハンドシェイクを制御できます。 デバイスの列挙とペアリングのサンプルでは、新しいデバイスを関連付けることのさまざまな側面について詳しく説明します。
この例では、暗号化を使用しないデバイスとのペアリングを開始します。 これは、リモート デバイスが機能するために暗号化または認証を必要としない場合にのみ機能します。
// 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);
デバイスを使用する前に、Bluetoothデバイスをペアリングする必要がありますか?
BLUETOOTH RFCOMM (クラシック) を利用する場合は、デバイスを使用する前にデバイスをペアリングする必要はありません。 Windows 10 リリース 1607 以降では、近くのデバイスを照会して接続するだけです。 更新された RFCOMM チャット サンプル には、この機能が示されています。
(14393 以下) この機能は Bluetooth Low Energy (GATT Client) では使用できないため、これらのデバイスにアクセスするには、[設定] ページまたは Windows.Devices.Enumeration API を使用してペアリングする必要があります。
(15030 以上) Bluetoothデバイスのペアリングは必要なくなりました。 リモート デバイスの現在の状態を照会するには、GetGattServicesAsync や GetCharacteristicsAsync などの新しい非同期 API を使用します。 詳細については、 クライアント のドキュメント を参照してください。
デバイスと通信する前に、いつデバイスとペアリングする必要がありますか?
一般に、デバイスとの信頼された長期的な結合が必要な場合は、ユーザーを設定ページに誘導するか、デバイス列挙 API とペアリング API を使用して、デバイスとペアリングします。 公開されているデバイス (温度センサーまたはビーコン) から情報を読み取る必要がある場合は、デバイスとペアリングする手間をかけずに、広告を接続またはリッスンします。 これにより、多数のデバイスがペアリングをサポートしていないため、長期的な相互運用性の問題が回避されます。
すべての Windows デバイスで周辺機器の役割がサポートされていますか?
No. これはハードウェアに依存する機能ですが、サポートされているかどうかを照会するためのメソッド BluetoothAdapter.IsPeripheralRoleSupported が提供されています。 現在サポートされているデバイスには、8992 以降の Windows Phone と RPi3 (Windows IoT) が含まれます。
Win32 からこれらの API にアクセスできますか?
はい。これらすべての API が機能するはずです。 このブログでは、 デスクトップ アプリケーションから Windows API を呼び出す方法について詳しく説明します。