如何读取特征数据

时间:2019-12-20 12:36:15

标签: android xamarin xamarin.forms bluetooth bluetooth-gatt

我正在针对Xamarin.Forms使用BLE设备。您能帮忙解决以下问题吗?我正在使用此Package

复制步骤

  1. 扫描后,我有一些设备。我正在选择设备。选择后,我正在连接到该设备。

  2. 我有一些服务清单。所以我迭代了一项服务,并且得到了该服务的特征

  3. 我有一些特征列表。我正在迭代第一个特征并阅读。应用程序崩溃了。

预期行为

告诉我们应该怎么办

实际行为

它应该读取并给出字节,而不是崩溃

崩溃日志

Excepotion不被抛出。这些是我在输出屏幕中获得的详细信息

12-20 17:54:18.170 D/BluetoothGatt(20372): onConnectionUpdated() - Device=98:07:2D:45:76:83 interval=39 latency=0 timeout=500 status=0
12-20 17:54:22.020 D/BluetoothGatt(20372): onConnectionUpdated() - Device=98:07:2D:45:76:83 interval=798 latency=0 timeout=1000 status=0
12-20 17:54:22.290 I/Choreographer(20372): Skipped 248 frames!  The application may be doing too much work on its main thread.
12-20 17:54:22.292 W/Looper  (20372): Slow Frame: doFrame is 4148ms late
12-20 17:54:24.763 F/        (20372): * Assertion at /Users/builder/jenkins/workspace/xamarin-android-d15-9/xamarin-android/external/mono/mono/mini/debugger-agent.c:4931, condition `is_ok (error)' not met, function:get_this_async_id, Could not execute the method because the containing type is not fully instantiated. assembly:<unknown assembly> type:<unknown type> member:(null)

配置

插件版本:例如2.1.1(最新)

平台:Android 8.1 API-27

设备:Redmi Note

Xamarin.Forms :4.4.0.991265(最新)

我无法附上样品。这是我的摘录

private async void Button_Clicked(object sender, EventArgs e)
        {
            var services = await _connectedDevice.GetServicesAsync();
            if (services != null)
            {
                var characteristics = await services[0].GetCharacteristicsAsync();
                if (characteristics != null)
                {
                    foreach (var character in characteristics)
                   {
                                var byteValue = await character.ReadAsync(); /// Crashed while reading this line
                                 var str = Encoding.UTF8.GetString(byteValue);
                                 output.Text = str;
                            }                  
                }
            }
}

预先感谢

1 个答案:

答案 0 :(得分:0)

如果我通过ViewModel读取特性,则效果很好。我没有单击按钮,而是在列表视图和点击的项目中创建了一组服务,列出了一组特征,然后阅读了