![](/img/trans.png)
[英]Scanning for BLE peripherals with a scan filter based on advertised service UUID
[英]Android BLE : Retrieve service UUID in onLeScan() callback when advertised from iOS Peripheral
我使用 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 格式的數據。 請參閱藍牙核心規范第 8 節。
掃描記錄包含一個或多個連續的 EIR 條目,其格式如下:
<entry length (1 byte)> <data type (1 byte)> <data (length - 1 bytes)>
您正在尋找類型為 0x02 或 0x03 的 EIR 條目(請參閱藍牙核心規范第 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
這是 Android BLE 中的一個已知錯誤 - 過濾僅適用於 16 位 UUID,而不是完整的 128 位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.