我正在制作一个必须与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应用程序没有这些问题。
有没有人遇到过这些问题? 任何想法如何解决它们?
答案 0 :(得分:1)
修改强> 我们做了“解决”这个。为了防止有人在这种情况下遇到困难,我的案例中的问题是从设备到设备甚至从连接到连接的ymmv。 有时这个过程会在一秒左右的时间内发生,需要花费5次,在我的测试中,它可以在我测试的设备上爬到15。 至于为什么这是我无法分辨的。
答案 1 :(得分:-1)
我遇到同样的问题。我连接到Bluegigga BLE113蓝牙4.0模块。我的应用程序基于BluetoothLeGatt示例源。我的三星手机连接很好,没有问题。我的LG V10无法连接。除了有时,它会连接。大多数情况下,它不会连接。永远不会调用onConnectionStateChange。这非常令人沮丧,我无法弄清楚这个问题。
但如果我使用NRF Connect,我可以连接我的LG手机,这似乎证明有一个编程解决方案。但是他们没有发布NRF-Connect的来源。
如果有人可以扩展如何解决这个问题,我将不胜感激。