我需要在Flutter中重建一个android应用程序,它将收听BLE广告数据包并解释数据。
现有的协议可以解释安卓的scanRecord,因为它是一个字节数组。
然而,在flutter中,我使用了flutter blue插件,它给出了BLE ScanResult作为一个地图。但我找不到一种方法来解释广告数据包,因为它看起来像一个整数列表。示例:{256:0,0,0,16,1,57,33,18,0,0,154,10,0}
谁能帮我把颤动蓝的ScanResult转换成类似于scanRecord格式的Android的bytearray,这样我就可以用现有的协议来解释数据了。
提前谢谢。
发布于 2021-06-24 04:38:27
Flutter Blue ScanResult以一种易于解释的形式嵌入了您需要的所有内容:
class ScanResult {
final BluetoothDevice device;
final AdvertisementData advertisementData;
final int rssi;
}您可以在BluetoothDevice对象中找到BLE、蓝牙名称和其他一些值。AdvertisementData甚至提供关于传输功率电平、设备是否可连接、设备实现什么BLE GATT服务UUID (serviceUuids)以及它具有什么服务数据与这些UUID (serviceData)相关的更多细节。
class AdvertisementData {
final String localName;
final int? txPowerLevel;
final bool connectable;
final Map<int, List<int>> manufacturerData;
final Map<String, List<int>> serviceData;
final List<String> serviceUuids;
}这是有的,所以你不必担心终身性和所有的解码。它是由Protobuf对象在幕后完成的。示例应用程序演示了如何很好地格式化这些数据,比如UUID的十六进制输出。
这些由Protobuf协议栈创建的Dart类不适合访问原始字节数据,因此无法通过API获得。所以我猜你可能想要在你的Android代码中表达更高层次的逻辑,并真正考虑它的作用。您可能正在将Android迁移到Flutter?即使是Android也在ScanRecord中提供了更高级别的功能。如果您依赖于提供给您的解码数据,您将获得更好的可维护性和更好的兼容性代码。除非你正在处理一些非常专有的东西,但即使是这样的东西也必须遵守BLE协议,所以你应该会得到一个更好的结果。
https://stackoverflow.com/questions/64750948
复制相似问题