如何在Android和多个BLE之间建立更稳定的连接?

时间:2014-11-13 08:40:53

标签: android

我是否实施 Android BLE 之间的关联?喜欢 Anti-lost finder ,Android手机连接到BLE设备后,手机每秒都会读取BLE设备的RSSI。

如果 RSSI of BLE device 低于 RSSI threshold ,则认为 Out of Range 。例如:阈值为-70 ,设备的当前RSSI为-80

当应用认为 Out of Range 时。它每隔5秒将消息发送到BLE。但几次后它总是断开连接。我使用以下代码将消息发送到BLE设备。

BluetoothGattService HelloService = Gatt.getService(HELLO_SERVICE_UUID);

if(HelloService == null) {
    Log.d(TAG, "HelloService not found!");
    return;
}

//If the Service is not null , try to get the characteristic.
BluetoothGattCharacteristic Characteristic = HelloService.getCharacteristic(UUID_HELLO_CHARACTERISTIC);

if(Characteristic == null) {
    Log.d(TAG, "Characteristic not found!");
    return;
}       

Gatt.setCharacteristicNotification(Characteristic, true);

Characteristic.setValue(text, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
Gatt.writeCharacteristic(Characteristic);
Log.d(TAG, "StepCount Characteristic End!");    

以上代码是正确的,BLE可以接收消息。但是BLE设备会在几秒钟后断开连接。似乎在短时间内不止一件事是BLE设备的负担。

问题是:如何在Android和BLE之间建立更稳定的连接?

1 个答案:

答案 0 :(得分:3)

一些建议:

  • 如果可以避免,请不要使用通知。根据某些环境中某些手机的个人经验,通知可能会停止工作并且似乎导致一般不稳定。请尝试定期阅读。
  • 只有在收到前一次读取或写入BluetoothGattCallback.onCharacteristicWrite()BluetoothGattCallback.onCharacteristicRead()的回叫后才能进行读取或写入。
  • 更一般地说,不要一次做两件事,无论是扫描,连接,阅读,写作等等。您应该使用作业队列序列化所有操作,仅在上一个作业完成(或失败)时从该队列中弹出。
  • 在您谈论的几乎超出范围的情况下,操作可能需要很长时间才能完成,有时甚至超过5秒。因此,在5秒或更短的时间内完成另一项操作,您将有效地“踩踏”#34;以前的操作。 然而,在这些情况下,操作也永远不会返回回调,因此您必须实现超时。我用了10秒钟。除此之外,操作失败了。