android - 如何从扫描的 BLE 设备中读取原始数据?

标签 android bluetooth-lowenergy android-bluetooth rxandroidble android-ble-library

我正在使用 RxAndroidBle我的 BLE 应用程序的库。 像 nrfConnect 应用程序一样,我想从 BLE 设备读取 RAW 数据。 enter image description here

如何从设备读取RAW数据?

最佳答案

您看到的原始数据是您的蓝牙设备公布的十六进制值。

您的应用可以使用 android.bluetooth.le.BluetoothLeScanner 的方法读取这些数据:

public void startScan(List<ScanFilter> filters, ScanSettings settings,
            final ScanCallback callback);

这是一个ScanCallback 实现的示例代码,您可以将其作为参数传递以读取广告数据:

ScanCallback scanCallback = new ScanCallback() {

    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        BluetoothDevice device = result.getDevice();
        byte[] scanRecord = result.getScanRecord().getBytes();
        int rssi = result.getRssi();

        // Search through raw data for the type identifier 0xFF, decode 
        // the following bytes over the encoded packet length ...
        // yourCallback.onScanResult(device, scanRecord, rssi);
    }
};

在您的情况下,原始数据仅包括 0xFF 类型,这是制造商特定数据类型,长度为 30 字节。 您的回调处理应在原始数据中搜索类型标识符 0xFF,并在编码数据包长度内解码以下字节。

广告数据中包含的数据类型因设备制造商而异,但至少应包括制造商特定数据,该数据以 company identifier 的两个字节开头。 .

还有其他类型的BLE广告数据,例如:

  • 服务 UUID:用于包含服务 UUID 列表
  • 本地名称:设备名称(缩写或完整)
  • 标志:当广告数据包可连接时包含的一位标志。
  • 广告间隔:不言自明。

此页面列出了各种类型的 BLE 广告数据:

https://www.novelbits.io/bluetooth-low-energy-advertisements-part-1/

关于android - 如何从扫描的 BLE 设备中读取原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67621147/

相关文章:

android - 使用 zxing 模块新导入的 Android Studio 项目错误

android - 无法在android studio中打开SPP

iphone - 未连接蓝牙设备不再可用时 IOS 收到通知

android - 低功耗蓝牙 (BTLE) 设备支持

android - BluetoothAdapter.startScan() 与 BluetoothAdapter.startLeScan()

android - 无论应用程序是否运行,在 Android O 上启动服务

android - 在 Photoshop 中为 Kindle Fire 设计

Android Ble MTU 大小

android - 获取蓝牙适配器时出现 Lint 错误

android - 如何修复由对等 android 关闭的 javax.net.ssl.sslexception 连接