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

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

师冥夜
2023-03-14

如何从设备读取RAW数据?

共有2个答案

祁高格
2023-03-14

要使用RxAndroidBle访问播发数据的原始字节,您需要:

  1. 执行扫描以获取扫描结果(扫描设备(ScanSettings,ScanFilter…)
  2. 从结果中,您需要获取扫描记录(ScanResult#getScanRecord)
  3. 从该记录中,您可以访问原始字节[](ScanRecord#getBytes)
邵飞宇
2023-03-14

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

你的应用程序可以使用android读取这些数据。蓝牙。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,并在编码的数据包长度上解码以下字节。

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

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

  • 服务UUID:用于包括服务UUID列表

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

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

 类似资料:
  • 我有3台Android设备,三星Galaxy S3手机,三星Tab4和Verizon OEM平板电脑。Verizon OEM平板电脑不支持BLE、API 17。我从android开发者网站安装了“BLE设备扫描”,并在Galaxy S3上运行。它只显示Verizon平板电脑是找到的设备。当我在三星Tab4上运行相同的应用程序时,它只显示Galaxy S3作为找到的设备。如果我只看Galaxy S3

  • 我正在创建一个Android应用程序,该应用程序使用Android Studio扫描所有附近的BLE(蓝牙低功耗)设备。 我想我已经实施了所有这些文件: https://developer.android.com/guide/topics/connectivity/bluetooth/ble-overview https://developer.android.com/guide/topics/c

  • 我拥有一个极地H10胸带,它以蓝牙低能量运行,并提供心率和心率变化。 我想用Android应用程序读取这些值。由于官方BLE教程中的帮助,我能够连接到设备。现在的问题是从设备中读取心率和心率变异性值。每次设备上有新值可用时,我都要读取该值(并且至少每秒都有新值)。 我找到了以下代码: 假设我与设备有连接,我如何使用它来提取心率和r-r间隔(节拍到节拍间隔)?如果有人能举个简短的例子,我会很高兴。此

  • 我试图扫描BLE设备与 (我知道它在新版本中已经过时了,但我只是想看看它是否能与我的手机配合使用[4.4],我正在使用它)。因此,它开始扫描,然后继续,没有给出错误,但没有检测到设备。也会触发OnLEScan事件,但其中的设备参数为null。我的LE设备就在那里并已连接。 在Google上,我发现如果BluetoothAdapter没有UUID,就会发生这种情况。如何设置UUID?何时调用/启动O

  • 我试图用BLE API扫描附近的蓝牙设备,但它似乎不起作用 我已经在清单中添加了权限 以下内容在创建对象时 创建扫描仪回调对象并进一步扫描 在logcat中,我只看到以下内容 这是我的app build gradle } 有人能指出我在这里遗漏了什么吗?

  • 我是新来的JavaScript,所以我可能有一些非常规的编程方式。也就是说,我正在做一个项目,我需要读写数据到自定义BLE设备。我使用gatt服务器协议进行连接。我能够与设备连接,但现在我试图从寄存器中读取数据。 我看了从谷歌以及网络蓝牙github的网络样本,但我无法理解它。下面的代码是我目前试图打破这一点。早期的尝试让我陷入了这样一个事实,即我得到的值是一个对象或一个promise对象。