UWP Как проверить входящие запросы от устройства BLE?

Как проверить все входящие запросы от сопряженного устройства BLE к текущему устройству?

Я думаю, что это возможно с помощью событий, может быть, в UWP есть событие стрелки, или я должен реализовать настраиваемое событие, но где правильный путь?

У Microsoft есть объяснения по поводу GATT Server, i Думаю, это не то, что мне нужно, потому что мне не нужен сервер со службами и характеристиками, мне нужно только проверять входящий запрос и анализировать переданные данные в моем приложении.


person 4L3X    schedule 15.05.2018    source источник
comment
Что ты пробовал? Как устанавливается соединение? Какие услуги / характеристики предоставляет устройство?   -  person Magd Kudama    schedule 15.05.2018
comment
Смотри, два устройства подключены и спарены. Однажды, когда я попытался проверить пульс со второго устройства, он выполнил запрос к первому устройству (приложению). Затем я справляюсь с этим и делаю кое-что, но один раз (когда нажимаю кнопку). НО, мой вопрос - ВСЕГДА проверять входящие запросы, возможно, в другой задаче, но ловить это только тогда, когда второе устройство выполняет запрос (он может выполнять запрос вручную, без обратного вызова с первого устройства).   -  person 4L3X    schedule 15.05.2018


Ответы (1)


Я не нашел надежного способа проверки входящих запросов, но я кое-что проделал. Приложение может подписаться на уведомления с устройства (в моем случае это Mi Band 2) и получать некоторые данные с этого устройства через ValueChanged. Один раз я вызываю обработчик ValueChanged в App.xaml.cs после подключения и сопряжения устройства, и это работает во всех приложениях, мне не нужно вызывать его снова и снова.

Вот часть кода App.xaml.cs.

    protected async override void OnLaunched(LaunchActivatedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;
        MiBand2SDK.MiBand2 band = new MiBand2SDK.MiBand2();
        var page = typeof(Views.AuthPage);

        // Checking for device availability and current session
        if (_LocalSettings.Values["isAuthorized"] != null 
            && await band.ConnectAsync())
        {
            if (e.PreviousExecutionState == ApplicationExecutionState.NotRunning && await band.Auth.AuthenticateAsync())
                page = typeof(Views.MainPage);
            else if (band.Auth.IsAuthenticated())
                page = typeof(Views.MainPage);

            // Here we are, this notification handler of responses from the band.
            band.HeartRate.SetNotificationHandler();
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("Not Authenticated...");
        }
       // other part of code...

Вот код HeartRate.SetNotificationHandler ():

    public async void SetNotificationHandler()
    {
        _heartRateMeasurementCharacteristic = await Gatt.GetCharacteristicByServiceUuid(HEART_RATE_SERVICE, HEART_RATE_MEASUREMENT_CHARACTERISTIC);

        Debug.WriteLine("Subscribe for HeartRate notifications from band...");
        if (await _heartRateMeasurementCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify) == GattCommunicationStatus.Success)
            // Just subscribe for notifications and set ValueChanged. It's all.
            _heartRateMeasurementCharacteristic.ValueChanged += HeartRateMeasurementCharacteristicValueChanged;
    }

Надеюсь, это кому-то поможет ...

person 4L3X    schedule 15.05.2018