Я пытаюсь использовать BluetoothLEAdvertWatcher для обнаружения рекламных пакетов BLE.Однако после вызова Start () объект-наблюдатель всегда прерывается с ошибкой «Доступ запрещен».
Код довольно прост и имеет следующий вид:
auto filter = BluetoothLEAdvertisementFilter();
auto advert = BluetoothLEAdvertisement();
advert.LocalName(L"Greeny");
filter.Advertisement(advert);
m_watcher.AdvertisementFilter(filter);
// setup event handlers
m_watcher.Received({ this, &MainPage::OnAdvertisementRecieved });
m_watcher.Stopped({ this, &MainPage::OnAdvertisementStopped });
m_watcher.Start();
m_watcher - член класса, объявленный как:
BluetoothLEAdvertisementWatcher m_watcher;
Обработчики событий объявлены как:
void MainPage::OnAdvertisementRecieved(BluetoothLEAdvertisementWatcher const& watcher, BluetoothLEAdvertisementReceivedEventArgs const& args)
{
OutputDebugString(L"Bluetooth advertisement received!\n");
}
void MainPage::OnAdvertisementStopped(Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher const & watcher, Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs const & args)
{
OutputDebugString(L"Advertising stopped\n");
}
Этот код очень похож на пример кода в SDK, который находится в C #.Я пытаюсь сделать то же самое в C ++, поскольку я более знаком с ним.
Есть идеи, что может пойти не так?Я попытался удалить все фильтры, то есть с помощью наблюдателя в его состоянии по умолчанию.Это тоже дает ту же ошибку.Удаление обработчиков событий также приводит к той же ошибке.
Заранее спасибо.
РЕДАКТИРОВАТЬ: изменил заголовок, добавив ERROR_ACCESS_DENIED.
EDIT2: Точное место, где происходит ошибкаявляется: onecoreuap \ drivers \ wdm \ bluetooth \ user \ winrt \ advertising \ bluetoothleadvertisingwatcher.cpp (1510) \ Windows.Devices.Bluetooth.dll! 0F479314: (вызывающий абонент: 0F47AD40) Исключение (2) tid (2c1c) 80070005 Доступ запрещен.