TLDR:预计通过discoverServices()
的服务发现结果会因底层传输(LE与BR / EDR)而有所不同吗?
我有一个混合模式蓝牙配件,提供蓝牙经典设备和蓝牙LE外设等独特功能。
Android无法发现附件的蓝牙LE GATT服务,除非您使用隐藏的peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback, BluetoothDevice.TRANSPORT_LE)
API,允许您强制使用TRANSPORT_LE
或TRANSPORT_BREDR
。
当我通过peerBluetoothDevice.connectGatt(context, autoConnect, gattCallback)
连接设备然后调用discoverServices()
时,我只发现通用服务UUID(并且只有在许多连接尝试失败且神秘状态133传递到{{3}之后) }})。
但是,当我调用隐藏的onConnectionStateChange
然后调用discoverServices()
时,我得到完整的预期服务发现响应:
这是预期的Android框架行为(怀疑它,因此隐藏API)?用这种混合模式设计外围设备是不好的形式。操作
答案 0 :(得分:3)
在
从API 23开始,方法是公开的,因此似乎是避免上述问题的制裁方法。
该方法在android-5.0.0_r1
版本中似乎已经introduced到AOSP,并且在每个版本中都存在,导致它在API 23中公开。
因此,对于具有API级别21和22的设备,通过反射调用应该是安全的。对于具有先前平台版本的设备,似乎Android框架不提供用于缓解该问题的工具。