繁体   English   中英

获取 BLE 广告数据 - Android scanRecord 到 Flutter Blue ScanResult

[英]Get BLE advertisement data - Android scanRecord to Flutter Blue ScanResult

我需要在 Flutter 中重建一个 android 应用程序,它将侦听 BLE 广告数据包并解释数据。

现有协议可以解释Android的scanRecord,因为它是一个字节数组。

但是,在颤振中,我使用了颤振蓝色插件,它将 BLE ScanResult 作为地图。 但是我找不到解释广告数据包的方法,因为它看起来像一些整数列表。 示例:{256:[0,0,0,16,1,57,33,18,0,0,154,10,0]}

任何人都可以帮助我如何将 Flutter blue 的 ScanResult 转换为类似于 scanRecord 格式的 Android 字节数组,以便我可以使用现有协议解释数据。

提前致谢。

Flutter Blue ScanResult以易于解释的形式嵌入了您需要的所有内容:

class ScanResult {
  final BluetoothDevice device;
  final AdvertisementData advertisementData;
  final int rssi;
}

您可以在BluetoothDevice对象中找到 BLE ID、蓝牙名称和一些其他值。 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;
}

这是在那里,所以你不必担心endinanness 和所有的解码。 它是由 Protobuf 对象在幕后完成的。 示例应用程序演示了如何很好地格式化这些数据,例如 UUID 的六进制输出。

这些由 Protobuf 协议栈创建的 Dart 类不适合访问原始字节数据,因此无法通过 API 访问。 所以我猜你可能想在你的 Android 代码中表达更高层次的逻辑,并实际考虑它的作用。 您可能正在将 Android 迁移到 Flutter? 甚至 Android 在ScanRecord 中也提供了更高级别的功能。 如果您依赖提供给您的解码数据,您最终将获得更好的可维护性和更兼容的代码。 除非你正在处理一些非常专有的东西,但即使是这样的东西也必须遵守 BLE 协议,所以你应该在一个更好的地方结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM