我正在制作一个必须与 Android 上的 BLE 设备通信的应用程序。
我在建立与 BLE 设备的连接时遇到问题。
案例 1) 扫描: 在设备被发现并通过以下方式报告后的扫描期间
BluetoothLEScanCallback.onScanResult(...)
我正在尝试通过以下方式连接:
result.getDevice().connectGatt(...)
问题是在我测试的某些设备上(即运行 Android 5.0.1 的 HTC One M8 和运行 Android 4.3 的 HTC Desire 516)连接过程似乎失败,即回调
BluetoothGattCallback.onConnectionStateChange(....)
大多数时候根本不调用。现在这不是一致的行为,有时有时不是。
第二个问题是,如果建立了连接,通常
BluetoothGatt.discoverServices()
呼叫失败,即 BluetoothGattCallback.onServicesDiscovered(...) 也没有被调用。我尝试以 X 毫秒的间隔重试几次调用,但无论尝试次数或它们之间的间隔如何,它似乎总是失败。
案例 2听力
当我试图简单地“监听”一个设备时,几乎同样的事情发生了,再次调用
BluetoothDevice device = BluetoothManager.getAdapter().getRemoteDevice(macAddress);
device.connectGatt(...)
结果往往在相同的情况下。
在这两种情况下,我大部分时间都遇到 Android 问题,我有一个 Nexus 5 设备,在该设备上,相同的代码似乎大部分都可以工作(有时 BT 堆栈似乎无法完成它的工作)更令人不安的是我们拥有的 iOS 应用程序没有这些问题。
有没有人遇到过这些问题?任何想法如何解决它们?