gpt4 book ai didi

Android 的 BLE 服务发现 (BluetoothGatt#discoverServices()) 和低功耗与 BR/EDR

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:38 33 4
gpt4 key购买 nike

TLDR:是否预期服务发现结果是通过 discoverServices() 产生的?会根据底层传输(LE 与 BR/EDR)而有所不同吗?

我有一个混合模式蓝牙配件,它提供了作为蓝牙经典设备和蓝牙 LE 外围设备的独特功能。

Android 无法发现配件的蓝牙 LE GATT 服务,除非您使用隐藏的 peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE)允许您强制使用 TRANSPORT_LETRANSPORT_BREDR 的 API。

当我通过 peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback) 连接设备时然后调用discoverServices()我只会发现通用服务 UUID(并且只有在许多失败的连接尝试之后,神秘状态 133 传送到 onConnectionStateChange )。

  • “00001800-0000-1000-8000-00805f9b34fb”(通用访问权限)
  • “00001801-0000-1000-8000-00805f9b34fb”(通用属性)。

但是,当我调用隐藏的 peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE) 时然后调用 discoverServices() 我得到完整的预期服务发现响应:

  • “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”(我的定制服务)
  • “00001800-0000-1000-8000-00805f9b34fb”(通用访问权限)
  • “00001801-0000-1000-8000-00805f9b34fb”(通用属性)。

这是预期的 Android 框架行为吗(对此表示怀疑,因此隐藏了 API)?设计具有这种“混合模式”操作的外围设备是一种不好的形式吗?

最佳答案

BluetoothDevice.connectGatt(Context context, boolean autoConnect, android.bluetooth.BluetoothGattCallback callback, int transport)

方法从 API 23 开始公开,因此似乎是避免上述问题的认可方法。

该方法似乎是 introducedandroid-5.0.0_r1 版本中添加到 AOSP,并且出现在每个版本中,直到它在 API 23 中公开。因此,对于 API 级别 21 和 22 的设备,通过反射调用应该是安全的。对于具有先前平台版本的设备,Android 框架似乎没有提供缓解该问题的工具。

关于Android 的 BLE 服务发现 (BluetoothGatt#discoverServices()) 和低功耗与 BR/EDR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654501/

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