簡體   English   中英

Android BLE:當從 iOS 外設廣告時,在 onLeScan() 回調中檢索服務 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 位。

請參閱Google 問題 58931

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM