UWPアプリケーションを作成しています。BluetoothLEAdvertisementWatcherメソッドを使用して、周囲のBLEデバイスから広告をキャプチャしています。これはすべて正常に機能し、BluetoothLEAdvertisementReceivedEventArgs .....をキャプチャすることで、デバイスのリストを作成できます。
private async void LockerAdv_Received(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
ServiceUuidsFound += args.Advertisement.ServiceUuids.Count;
Adverts.Add(args);
ただし、広告データで運ばれるServiceData UUID(この場合、バッテリーサービスデータの場合は0x180f、独自のサービスデータの場合は0xb991)をキャプチャしたいと思います。
上記のように広告をキャプチャしてAdvertisement.ServiceUuids.Countを調べると、2つのServiceData UUIDが存在し、Nordic nRFアプリのようなアプリがそれらを見つけて表示していることがわかっていても、カウントは常にゼロです。
また、デバッガーを使用して実行を停止し、Advertisement.ServiceUuidsを調べると、キャプチャされていないように見え、以下に示すように確実にアクセスできません。スクリーンショットへのリンク。
使ってみました
ScanningMode = BluetoothLEScanningMode.Active;
そして
ScanningMode = BluetoothLEScanningMode.Passive;
そしてそれは違いはありません。
最終的に私が望んでいるのは、アプリケーションに役立つデータが含まれているため、広告データからServiceDataを抽出できることですが、WindowsがUUIDの存在を報告しない場合は、関連付けられたデータを取得できないと確信しています。それ!!
だから、私が知る必要があるのは、私が何か間違ったことをしているということですか?それはWindows10の制限ですか(私は最新バージョンを使用しています)?それとも、使用しているDell Optiflexの問題ですか?
どんな助けでもありがたいことに受け取られるでしょう
あなたは間違ったことに気づいています。デバッガーとウォッチでは、深く掘り下げてネイティブビューを表示することはできません。必要なアイテムを最初にリストに入れてから、リストにアイテムが含まれているかどうか、さらにアイテムが多い他のコレクションが含まれているかどうかを確認できます。以下はその方法を示す例です。私はそれがすべてのアイテムをカバーしているわけではないと思います、それはあなた次第です:
private async void OnAdvertisementReceivedAsync(BluetoothLEAdvertisementWatcher watcher,
BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
//we have to stop the watcher to get the data from one advertising device only.
var device = await BluetoothLEDevice.FromBluetoothAddressAsync(eventArgs.BluetoothAddress);
if (device != null)
/* Check all advertisement items for null!
* Not all of them are present!
* Null check is not done in this example!*/
{
var TimeStamp = eventArgs.Timestamp.DateTime;
var LocalName = eventArgs.Advertisement.LocalName;
var Name = device.Name;
var BleAdress = eventArgs.BluetoothAddress;//ulong
var Rssi = eventArgs.RawSignalStrengthInDBm.ToString();
var ConnectionStatus = device.ConnectionStatus;
var Access = device.DeviceAccessInformation.CurrentStatus;
/* Shows advertising flags:
LimitedDiscoverableMode = 1,
GeneralDiscoverableMode = 2,
ClassicNotSupported = 4,
DualModeControllerCapable = 8,
DualModeHostCapable = 16.
*/
var flags = eventArgs.Advertisement.Flags.ToString();
var AdvNumberOfDataSections = eventArgs.Advertisement.DataSections.Count;
/*AdvDataSections contains the advertisement data */
List<BluetoothLEAdvertisementDataSection> AdvDataSections = new List<BluetoothLEAdvertisementDataSection>();
foreach (var item in eventArgs.Advertisement.DataSections)
{
AdvDataSections.Add(item);
}
List<BluetoothLEManufacturerData> AdvManufacturerData = new List<BluetoothLEManufacturerData>();
foreach (var item in eventArgs.Advertisement.ManufacturerData)
{
AdvManufacturerData.Add(item);
}
List<GattDeviceService> ServicesList = new List<GattDeviceService>();
var services = await device.GetGattServicesAsync(BluetoothCacheMode.Uncached);
if (services != null)
{
foreach (var item in services.Services)
{
ServicesList.Add(item);
}
}
}
/* Start the watcher again to get other devices or missing services or data */
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加