当前位置: 首页 > 知识库问答 >
问题:

如何使用Android蓝牙API来计时GATT交换?

步衡
2023-03-14

我正在编写一个Android应用程序,通过GATT服务与定制设备进行通信。所述设备提供具有两个特征的服务,用于读取和写入数据。当一些数据写入写入特性时,BLE设备将通过有线UART接口将其发送到其他设备。然后,另一个设备将通过相同的UART接口响应BLE设备。收到后,BLE设备将发送一个通知,通知其服务的读取特性上有新数据可用,以便我的Android应用程序可以检索它。

我想做的是测量从Android应用程序发送请求到收到新数据可用的通知之间经过的时间。

我已经实现了一个“秒表”作为长的。我将其设置为系统。currentTimeMillis() 当我写一个数据并将其值与另一个对系统的调用进行比较时。currentTimeMillis() 收到通知后给出如下信息:

long stopwatch = System.currentTimeMillis();
// ...

// ...
long elapsed = System.currentTimeMillis() - stopwatch;

我设置了2个秒表来比较2个测量时间。

当我调用gatt时,第一个秒表被重置。writeCharacteristic(myCharacteristic)第二个在BluetoothGattCallback时重置。调用onCharacteristicWrite()

我已经注册了READ特性的通知应用程序,所以当BluetoothGattCallback时,我会停止两个秒表。调用onCharacteristicChanged()

问题是,这些测量之间平均有100毫秒!我觉得很多。当我调用gatt时开始的平均时间。writeCharacteristic(myCharacteristic)是在BluetoothGattCallback时开始的平均140毫秒时间。调用onCharacteristicWrite()的时间为40ms。

所以我想知道什么是正确的方法来计时这样的交换,什么时候我应该重置我的秒表,以获得最准确的时间测量。

共有1个答案

聂奇
2023-03-14

如果你使用50毫秒的默认连接间隔,这一点也不奇怪。假设写入是在下一个连接事件时发出的(未来可能会发生长达50毫秒),并且结果在50毫秒后的下一个连接事件时可用并通知,则得到100毫秒。您可以发出连接参数更新请求以获得更快的连接间隔。

如果您想获得低开销,为什么要通知数据可用,然后读取,而不是直接将数据嵌入通知负载中?

 类似资料:
  • 我正在尝试构建一个使用蓝牙的android应用程序。在教程中,他们使用128位UUID,但我只有16位UUID。我必须使用服务UUID和蓝牙基础创建一个新的128位UUID。 例子: 警报通知服务UUID(16bit)= 通过组合这两个UUID,我们收到。。。 警报通知服务UUID(128bit)= 有没有合适的方法?

  • 我扩展插件/gatt_example. c在Bluez源尝试BLE通知功能没有成功。我正在使用Bluez源中包含的电池服务示例。它具有1个具有READ和NOTIFY属性的特性。我添加dbus方法来调用attrib_db_update()来从蓝牙守护进程外部更新特征值。 现在,我可以连接哪个客户端(带有Android 4.3的Nexus4和iPhone(不含LightBlue的应用程序))并启动通知

  • 从蓝牙android API获取android辅助蓝牙gatt服务。 下面是我们获取ble服务的代码: 甚至尝试以独占方式获取辅助服务,但它返回空对象: 有人可以指出任何指针如何在Android中搜索辅助服务。

  • 我有一个Android应用程序,我正在开发。这是一个BTLE应用程序,我有一些BTLE标签,我需要谈谈。 我是按照书做的,发现设备,GATT连接(后续连接),写/读特性。。。它起作用了。 现在奇怪的是,如果我关闭并打开应用程序两次,它就会停止工作。 假设我已经有一个标签正确连接,粘合和正常工作。 手机重启。第一次打开应用程序- 在日志中,每次尝试都没有什么不同。我记录每个调用并打印返回状态:没有区

  • 我正在考虑为一个定制应用程序实现一些GATT服务,但我现在正忙于研究。我知道服务UUID不是随机的,有些部分定义得很好,有些部分仍然让我困惑。 E、 g.设备信息服务的广告名称似乎是0000180a xxx,我可以在中找到“180a”https://www.bluetooth.com/specifications/gatt/services/,但子字段“型号字符串”的id为00002a24 xxx

  • 首先,BLE外设模拟器的源代码对于任何研究Web蓝牙的人来说都是一个巨大的资源。 有一份经批准的关贸总协定服务清单。 当我修改Android源代码以使用自定义的GATT服务(只需在Android代码中指定自己的UUID即可轻松完成)时,从网页到运行GATT服务器的Android应用程序的配对失败。 Web蓝牙留档确实声明,“如果设备通告的服务UUID与服务UUID集有非空交集,请添加设备以产生结果