Незапускается поиск Bluetooth устройств

150
28 сентября 2021, 19:10

Пишу кроссплатформенную реализацию поиска BLE устройств. Имею следующий код обертки над стандартным UWP классом:

[assembly: Dependency(typeof(BtTest.UWP.Models.BluetoothScaner))]
namespace BtTest.UWP.Models
{
public class BluetoothScaner : IBluetoothScaner
{
    public BluetoothLEAdvertisementWatcher Watcher { get; set; }
    public BluetoothScaner()
    {
        Watcher = new BluetoothLEAdvertisementWatcher()
        {
            ScanningMode = BluetoothLEScanningMode.Active
        };
        Watcher.Received += OnRecieved;
        Watcher.Stopped += WatcherStopped;
        Watcher.Start();
    }
    private void WatcherStopped(BluetoothLEAdvertisementWatcher sender,
        BluetoothLEAdvertisementWatcherStoppedEventArgs args)
    {
        //throw new NotImplementedException();
    }
    private void OnRecieved(BluetoothLEAdvertisementWatcher sender,
        BluetoothLEAdvertisementReceivedEventArgs args)
    {
        Received?.Invoke(args.Advertisement.LocalName, args);
        Console.WriteLine("onRecieved");
    }
    public event Action<string, object> Received;
    public void Start()
    {
        Watcher.Start();
    }
    public void Stop()
    {
        Watcher.Stop();
    }
}
}

Использую его следующим образом в проекте реализации UWP

public class MainPageViewModel : BaseViewModel
{
    private MainPageModel _mainPageModel;
    private IBluetoothScaner _bluetoothScaner = DependencyService.Get<IBluetoothScaner>();
    public ObservableCollection<string> ListViewBtItems = new ObservableCollection<string>();
    private void OnDeviceDetected(string name, object bluetoothArgs)
    {
        Add(name, bluetoothArgs);
    }
    public void Add(string name, object bluetoothArgs)
    {
        _mainPageModel.DeviceDict.Add(name, bluetoothArgs);
        ListViewBtItems.Add(name);
    }
    public object GetValue(string name)
    {
        return _mainPageModel.DeviceDict[name];
    }
    public MainPageViewModel()
    {
        _bluetoothScaner.Received += OnDeviceDetected;
        _bluetoothScaner.Start();
    }
}

В итоге получаю, что событие OnRecieved никогда не срабатывает, хотя должно и устройства в эфире есть. Что интересно - строчка Watcher.Start(); переводит объект Watcher в состояние Aborted, а не Started. Это было установленно через дебагер. Может ли кто нибудь помочь разобраться в данной проблеме?

Answer 1

Проблема решена благодаря комментариям Mike Petrichenko и статье https://keyoti.com/blog/bluetooth-low-energy-in-windows-10-troubleshooting-capabilities/ Всем спасибо

READ ALSO
Зачем LinkerPleaseInclude

Зачем LinkerPleaseInclude

Делал кастомный UITextView и сталкнулся с проблемой при байндинге текстового поля прога просто вылетала

245
Найти минимальную цену min

Найти минимальную цену min

необходимо получить минимальное значение цены (Price), знаю о существовании min, но тут есть проблема, цены в разных array, как в таком случить минимальное...

95
composer repositories, после установки не видит пакет

composer repositories, после установки не видит пакет

Всем привет, в первый раз устанавливаю через composer библиотеку из github

143