gpt4 book ai didi

安卓蓝牙 : Retrieve service UUID in onLeScan() callback when advertised from iOS Peripheral

转载 作者:技术小花猫 更新时间:2023-10-29 10:37:10 30 4
gpt4 key购买 nike

我使用 Nexus 4(4.4 kitkat)作为中心,iPad 作为外围设备。外围设备有一项广告服务。广告数据包有一些数据(22 字节)+ 服务 UUID。当我尝试扫描外围设备时发现了 Android、iPad 外围设备。但是,当我尝试从回调中的 scanRecord 参数获取服务 UUID 时,我找不到它。我得到的只是外围设备正在发送的 20 字节数据。当我尝试扫描设备时UUID 我无法发现那些外围设备。

以下是广告服务的iOS代码。使用的服务ID是“0000192f-0000-1000-8000-00805f9b34fb”

CBUUID *serviceUuid = [CBUUID UUIDWithString:TRANSFER_SERVICE_UUID];
[self.peripheralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey : @[serviceUuid],
CBAdvertisementDataLocalNameKey:[[BTLEConfigs sharedBTLEConfig] getAdvertizingUUID]}];

当我在没有服务 UUID 的情况下扫描时发现设备。

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {

@Override
public void onLeScan(final BluetoothDevice device, int rssi, final byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {

//-- how to retrieve the service id from scanRecord
}
});
}
};

服务是在两个 iOS 设备之间发现的,但在 Android 设备和 iOS 外围设备之间它不工作。如何扫描具有 16 位服务 UUID 的外围设备?感谢任何帮助。

最佳答案

扫描记录字节数组包含 EIR 格式的数据。查看Bluetooth Core Specification第 8 节。

扫描记录包含一个或多个顺序的 EIR 条目,其格式如下:

<entry length (1 byte)> <data type (1 byte)> <data (length - 1 bytes)>

您正在查找类型为 0x02 或 0x03 的 EIR 条目(参见 Bluetooth Core Specification 第 18.2 节)。条目的数据将包含一个或多个 Little Endian 格式的 UUID。

示例扫描记录:

02011a0303b4540a094c69676874426c7565

可以分解为:

02 01 1a                    Flags               - 1a
03 03 b454 16-bit service UUID - 54b4
0a 09 4c69676874426c7565 Local name - LightBlue

关于安卓蓝牙 : Retrieve service UUID in onLeScan() callback when advertised from iOS Peripheral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20352200/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com