如何使Android和多个BLE之间的连接更加稳定?
我正在实现Android和BLE之间的连接?像如何使Android和多个BLE之间的连接更加稳定?,android,Android,我正在实现Android和BLE之间的连接?像防丢失或查找器,android手机连接到BLE设备后,手机每秒读取一次BLE设备的RSSI 如果BLE设备的RSSI低于RSSI阈值,则认为超出范围。例如:阈值为-70,设备的当前RSSI为-80 当应用程序被认为超出范围时。它每5秒钟向BLE发送一次消息。但几次之后,它总是断开连接。我使用以下代码将消息发送到BLE设备 BluetoothGattService HelloService = Gatt.getService(HELLO_SERVICE
防丢失
或查找器
,android手机连接到BLE设备后,手机每秒读取一次BLE设备的RSSI
如果BLE设备的RSSI低于RSSI阈值,则认为超出范围。例如:阈值为-70,设备的当前RSSI为-80
当应用程序被认为超出范围时
。它每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设备将在几秒钟后断开连接。看来在短时间内做不止一件事对一个设备来说是个负担
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!");
问题是:如何使Android和BLE之间的连接更加稳定?一些建议:
- 如果可以避免,请不要使用通知。根据个人在某些环境中使用某些手机的经验,通知可能会停止工作,并可能导致总体不稳定。尝试定期阅读
- 只有在收到回拨到
或BluetoothGattCallback.onCharacteristicWrite()
进行上一次读或写操作的回调后,才能执行读或写操作BluetoothGattCallback.onCharacteristicRead()
- 更一般地说,永远不要同时做两件事,不管是扫描、连接、阅读、写作还是其他。您应该使用作业队列序列化所有操作,仅当上一个作业完成(或失败)时才从该队列弹出
- 在您所说的几乎超出范围的情况下,操作可能需要很长时间才能完成,有时超过5秒。因此,在5秒或更短的时间内完成另一个操作,实际上是在“踩”上一个操作。但是,在这些情况下,操作也永远不会返回回调,因此必须实现超时。我用10秒钟。除此之外,操作失败了
- 如果可以避免,请不要使用通知。根据个人在某些环境中使用某些手机的经验,通知可能会停止工作,并可能导致总体不稳定。尝试定期阅读
- 只有在收到回拨到
或BluetoothGattCallback.onCharacteristicWrite()
进行上一次读或写操作的回调后,才能执行读或写操作BluetoothGattCallback.onCharacteristicRead()
- 更一般地说,永远不要同时做两件事,不管是扫描、连接、阅读、写作还是其他。您应该使用作业队列序列化所有操作,仅当上一个作业完成(或失败)时才从该队列弹出
- 在您所说的几乎超出范围的情况下,操作可能需要很长时间才能完成,有时超过5秒。因此,在5秒或更短的时间内完成另一个操作,实际上是在“踩”上一个操作。但是,在这些情况下,操作也永远不会返回回调,因此必须实现超时。我用10秒钟。除此之外,操作失败了
- 如果可以避免,请不要使用通知。根据个人在某些环境中使用某些手机的经验,通知可能会停止工作,并可能导致总体不稳定。尝试定期阅读
- 只有在收到回拨到
或BluetoothGattCallback.onCharacteristicWrite()
进行上一次读或写操作的回调后,才能执行读或写操作BluetoothGattCallback.onCharacteristicRead()
- 更一般地说,永远不要同时做两件事,不管是扫描、连接、阅读、写作还是其他。您应该使用作业队列序列化所有操作,仅当上一个作业完成(或失败)时才从该队列弹出
- 在您所说的几乎超出范围的情况下,操作可能需要很长时间才能完成,有时超过5秒。因此,在5秒或更短的时间内完成另一个操作,实际上是在“踩”上一个操作。但是,在这些情况下,操作也永远不会返回回调,因此必须实现超时。我用10秒钟。除此之外,操作失败了
- 如果可以避免,请不要使用通知。根据个人在某些环境中使用某些手机的经验,通知可能会停止工作,并可能导致总体不稳定。尝试定期阅读
- 只有在收到回拨到
或BluetoothGattCallback.onCharacteristicWrite()
进行上一次读或写操作的回调后,才能执行读或写操作BluetoothGattCallback.onCharacteristicRead()
- 更一般地说,永远不要同时做两件事,不管是扫描、连接、阅读、写作还是其他。您应该使用作业队列序列化所有操作,仅当上一个作业完成(或失败)时才从该队列弹出
- 在您所说的几乎超出范围的情况下,操作可能需要很长时间才能完成,有时超过5秒。因此,在5秒或更短的时间内完成另一个操作,实际上是在“踩”上一个操作。但是,在这些情况下,操作也永远不会返回回调,因此必须实现超时。我用10秒钟。除此之外,操作失败了
- 一些建议:
- 一些建议:
- 一些建议: