UWP如何检查来自BLE设备的传入请求?

时间:2018-05-15 10:36:14

标签: bluetooth uwp bluetooth-lowenergy gatt bluetooth-gatt

如何检查从配对的BLE设备到当前设备的所有传入请求?

我认为有可能使用Events,也许UWP有针事件,或者我必须实现自定义事件,但正确的方法在哪里?

微软已经解释了GATT Server,我认为这不是我需要的,因为我不需要具有服务和特性的服务器,我只需要检查收到的请求并在我的应用程序中解析传递的数据。

1 个答案:

答案 0 :(得分:0)

我找不到确定方法来检查传入的请求,但我做了一些技巧。 应用程序可以订阅来自设备的通知(在我的情况下是它的Mi Band 2),并通过ValueChanged从该设备接收一些数据。 有一次我在连接和配对设备之后在App.xaml.cs中调用ValueChanged处理程序,并且这适用于所有应用程序,我不需要一次又一次地调用它。

这是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;
    }

希望它有所帮助...