我正在使用 RxAndroidBle我的 BLE 应用程序的库。 像 nrfConnect 应用程序一样,我想从 BLE 设备读取 RAW 数据。
如何从设备读取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/