0

我正在制作一个必须与 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 应用程序没有这些问题。

有没有人遇到过这些问题?任何想法如何解决它们?

4

2 回答 2

1

编辑: 我们确实“解决了”这个问题。以防万一有人偶然发现这种情况,我的问题是 ymmv 从设备到设备甚至从连接到连接都很多。有时该过程会在一秒钟左右发生,有时需要 5 次,在我的测试中,它可以在我测试的设备上攀升至 15 次。至于为什么会这样,我说不清。

于 2015-09-11T08:36:48.620 回答
-1

我遇到同样的问题。我连接到 Bluegigga BLE113 蓝牙 4.0 模块。我的应用程序基于 BluetoothLeGatt 示例源。我的三星手机连接很好,没有问题。我的 LG V10 无法连接。除了有时,它什么时候会连接。大多数情况下,它不会连接。onConnectionStateChange 永远不会被调用。这非常令人沮丧,我一直无法弄清楚问题所在。

但是如果我使用 NRF Connect,我可以连接我的 LG 手机,这似乎证明了有一个编程解决方案。但是他们没有发布 NRF-Connect 的源代码。

如果有人可以扩展如何解决此问题,我将不胜感激。

于 2017-12-06T00:08:04.310 回答