在 Android 上连接之前如何读取 BLE 外设的型号和序列号?

问题描述 投票:0回答:1

我感兴趣的BLE设备的型号和序列号可以在蓝牙扫描期间被其公司的iOS应用程序识别。我也希望我的 Android 应用程序能够做到这一点。该设备具有用于读取其型号字符串和序列号字符串的 GATT 特性。但我不认为应用程序可以在连接到设备之前读取 GATT 特征,因为它需要身份验证才能读取特征,而且我没有从 iOS 蓝牙 HCI 日志中观察到任何读取请求。

我认为这与广告数据有关(从iOS HCI日志中捕获并通过Wireshark查看):

Advertising Data
    Device Name: $Randomly_generated_name
        Length: 6
        Type: Device Name (0x09)
        Device Name: $Randomly_generated_name
    Flags
        Length: 2
        Type: Flags (0x01)
        000. .... = Reserved: 0x0
        ...0 .... = Simultaneous LE and BR/EDR to Same Device Capable (Host): false (0x0)
        .... 0... = Simultaneous LE and BR/EDR to Same Device Capable (Controller): false (0x0)
        .... .1.. = BR/EDR Not Supported: true (0x1)
        .... ..0. = LE General Discoverable Mode: false (0x0)
        .... ...1 = LE Limited Discoverable Mode: true (0x1)
    16-bit Service Class UUIDs
        Length: 7
        Type: 16-bit Service Class UUIDs (0x03)
        UUID 16: Battery Service (0x180f)
        UUID 16: Device Information (0x180a)
        UUID 16: Unknown ($Custom_UUID)

我无法从该广告数据中看到任何相关信息。然后我发现它还广告(?)来自其蓝牙经典模块的扩展查询响应(EIR):

Extended Inquiry Response Data
    Device Name: $Model_Abbreviation $Serial
        Length: 16
        Type: Device Name (0x09)
        Device Name: $Model_Abbreviation $Serial
    Tx Power Level
        Length: 2
        Type: Tx Power Level (0x0a)
        Power Level (dBm): 12
    16-bit Service Class UUIDs
        Length: 3
        Type: 16-bit Service Class UUIDs (0x03)
        UUID 16: Serial Port (0x1101)
    Unused

巧合的是,设备名称中有我需要的信息。但唯一的问题是这两个数据不共享相同的 MAC 地址或任何公共标识符,如果有多个设备,我不知道哪个 EIR 属于哪个广告数据。

或者还有其他方法可以满足我的要求吗?

android bluetooth bluetooth-lowenergy bluetooth-gatt
1个回答
0
投票

对于初学者来说,你是对的,如果不先建立连接,你就无法执行任何 GATT 操作。这与读取操作首先需要身份验证的事实无关。这更多是因为 GATT 操作(读、写、订阅等)发生在连接链路上,不能通过广告执行。

关于建立经典链路后通过 BLE 传输的连接,我唯一能想到的是是否存在通过经典链路传输的与 BLE 连接相关的信息。例如,一旦建立了经典蓝牙连接,LE MAC 地址或 LE 广告数据就有可能从远程设备发送到对等设备。这将为对等设备提供扫描 LE 设备时需要查找的内容。检查这一点的最佳方法是使用wireshark来嗅探两侧之间的通信。

然而,在所有这一切中,让我觉得奇怪的一件事是 BLE 广告数据包显示不支持 BR/EDR。这让我认为要么是制造商在蓝牙技术的实施中存在问题(应该由蓝牙资格流程标记),要么是wireshark解码数据时存在问题,或者最后可能存在人为错误。您的过程导致您查看不同的设备数据包。我建议您花一些时间首先关注为什么这个问题存在,因为它可能会导致您发现一个明显的问题,最终帮助您回答您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.