BLE advert - получить отображаемое имя устройства - PullRequest
0 голосов
/ 11 июня 2019

Довольно просто прослушать рекламу BLE и узнать адрес Bluetooth, уровень сигнала и т. Д. Из объявления. Эта страница говорит

Получив адрес, вы можете вызвать BluetoothLEDevice.FromBluetoothAddressAsync, чтобы получить ссылку на устройство.

так я и сделал, и это дало мне объект BluetoothLEDevice со свойством Name. К сожалению, имя часто - но не всегда - пустая строка.

Когда я в интерактивном режиме сканирую устройства Bluetooth, Windows показывает мне список имен для устройств, которые он может видеть (исключая уже подключенные устройства). Он делает это очень быстро и показывает количество устройств, которые никогда не появляются в именах, набранных из рекламы.

Существует ли надежная стратегия для быстрого получения имени, которое обычно отображается, когда компьютеры и телефоны отображают список непарных устройств?


Я попробовал предложение от Эмиля, и хотя это упрощает мой код, устраняя необходимость в получении объекта BluetoothLEDevice, остается фундаментальная проблема: нельзя полагаться на рекламные объявления, предоставляющие имя. Они даже не содержат значимых данных производителя.

Код в настоящее время выглядит следующим образом

    BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
    ...
        watcher.Received += OnAdvertisementReceived;
        watcher.Start();
    ...
    private void BleAdvertHandlerAsync(BluetoothLEAdvertisementReceivedEventArgs args)
    {
      var localName = args.Advertisement.LocalName;
      ...
    }

Добавление локального имени в переменную обходит тот факт, что разрешение значения влечет за собой вызов COM, который недопустим в выражении точки останова.

Играя с переключателями на моей мыши и клавиатуре, которые могут быть соединены с тремя разными хостами и переключаться между ними, я замечаю, что когда я говорю им подключиться к другому хосту, я немедленно получаю рекламу, содержащую имена. Если хост не присутствует, существует их постоянный поток, который прекращается, когда я снова переключаюсь на свой компьютер, и сеанс устанавливается.

Это говорит о том, что реклама - это не то, как Windows заполняет свой список непарных хостов.

1 Ответ

0 голосов
/ 11 июня 2019

Если вы используете наблюдателя рекламы, вы можете проверить свойство BluetoothLEAdvertisement.LocalName.

По второму вопросу: возможно, ваш телефон обнаружен через Bluetooth Classic?

...