【问题标题】:Android BLE : Retrieve service UUID in onLeScan() callback when advertised from iOS PeripheralAndroid BLE:从 iOS 外设发布广告时,在 onLeScan() 回调中检索服务 UUID
【发布时间】:2013-12-03 13:14:23
【问题描述】:

我使用 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 扫描外围设备?感谢任何帮助。

【问题讨论】:

  • 我也想找到解决办法。
  • 终于我能够从 scanRecord 中获取服务 UUID。这个链接帮助了我 - stackoverflow.com/a/19060589/662025.But 我仍然想知道如何使用 16 位 UUID 扫描传感器。
  • 您是否尝试过使用 TRANSFER_SERVICE_UUID=@"192f" ?

标签: android ios bluetooth-lowenergy


【解决方案1】:

扫描记录字节数组包含 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

【讨论】:

    【解决方案2】:

    这是 Android BLE 中的一个已知错误 - 过滤仅适用于 16 位 UUID 而不是完整的 128 位。

    Google issue 58931

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多