Всякий раз, когда я запускаю приложение BluetoothLEAdvertisementWatcher из приложения UWP, его статус прерывается. Использование такой же функциональности в консольном приложении без проблем (требуемые библиотеки включены). Когда я хочу соединиться с устройством BLE, я использую DeviceWatcher из приложения UWP без проблем. OS - Win10, а используется VS2015.Статус рекламы UWP BLE отменен
Чтобы ilustrate проблему, я сделал UWP проект с Bluetooth включен в возможности:
<Capabilities>
<Capability Name="internetClient" />
<DeviceCapability Name="bluetooth" />
</Capabilities>
Есть кнопки Пуск, Стоп и вид, и TextBlock используется для отображения состояния BluetoothLEAdvertisementWatcher на MainPage. Код:
public sealed partial class MainPage : Page
{
private BluetoothLEAdvertisementWatcher watcher = null;
public MainPage()
{
this.InitializeComponent();
watcher = new BluetoothLEAdvertisementWatcher();
watcher.ScanningMode = BluetoothLEScanningMode.Active;
textBlock.Text = watcher.Status.ToString();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
watcher.Received += OnAdvertisementReceived;
watcher.Stopped += OnAdvertisementWatcherStopped;
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
watcher.Stop();
}
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() =>
{
textBlock.Text = "rcvd" + watcher.Status.ToString();
});
}
private async void OnAdvertisementWatcherStopped(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementWatcherStoppedEventArgs eventArgs)
{
// Notify the user that the watcher was stopped
await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() =>
{
textBlock.Text = "stopped:" + watcher.Status.ToString();
});
}
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
watcher.Start();
textBlock.Text = watcher.Status.ToString();
}
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
watcher.Stop();
textBlock.Text = watcher.Status.ToString();
}
private void buttonView_Click(object sender, RoutedEventArgs e)
{
textBlock.Text = watcher.Status.ToString();
}
}
При запуске программы создается статус BluetoothLEAdvertisementWatcher. После нажатия кнопки «Пуск» запускается наблюдатель, но статус отменяется, и инициируется событие OnAdvertisementWatcherStopped (статус по-прежнему отменен).
Есть ли какие-либо предложения по преодолению этой проблемы? Или что-то, что можно сделать дополнительно, чтобы прояснить проблему?
ОБНОВЛЕНИЕ
приложение выполняется на другом ноутбуке. Результат тот же, поэтому это не аппаратная проблема.
Есть две рекомендации по сети:
, чтобы включить Bluetooth (это предложено в первом ответе Дмитрий)
проверить возможности ( https://keyoti.com/blog/bluetooth-low-energy-in-windows-10-troubleshooting-capabilities/)
Отсутствие предоставленного результата.
Дополнительное примечание: при регистрации события для Stopped удаляется (// watcher.Stopped + = OnAdvertisementWatcherStopped;) первый результат запущен. Следующий щелчок на кнопке View отобразит Aborted. За короткий промежуток времени результат будет действительным.
Любое предложение настроек конфигурации?
Спасибо, Дмитрий за усилия. – procrustes
У меня есть эта проблема на ноутбуке Dell (Bluetooth поддерживается на ноутбуке), который используется для разработки.После запуска измененного приложения настройки Bluetooth открываются, и у меня есть информация о том, что Bluetooth запущен. Я упомянул, что создал класс с BluetoothLEAdvertiseWatcher, который теперь является частью другого консольного приложения, которое успешно сканирует устройства BLE (на том же ноутбуке). Если предоставленная вами программа работает правильно в вашем окружении, тогда я сделал какую-то грубую ошибку ... или это аппаратная проблема. – procrustes