Ответ 1
Надежная запись позволяет проверять переданные значения и атомное выполнение одного или нескольких переданных сообщений.
Хорошее объяснение надежной процедуры записи можно найти в части BLE документации по проекту Mozillas Boot 2 Gecko. Хотя это и предназначено для JavaScript, описание beginReliableWrite()
в частности очень полезно для понимания процесса:
После того как была запущена надежная транзакция записи, все вызовы character.writeValue() отправляются на удаленное устройство для проверки и очереди для атомного исполнения. Обещание, что несет письменное значение возвращается в ответ на каждый character.writeValue() и приложение отвечает для проверки правильности передачи данных. После все характеристики были поставлены в очередь и проверены, executeReliableWrite() выполнит все записи. Если характеристика не было написано правильно, вызов abortReliableWrite() отменяет текущая транзакция без каких-либо значений на дистанционном LE устройство.
Вы начинаете надежную запись,
gatt.beginReliableWrite();
задайте значение характеристики и запишите его.
characteristic.setValue(value);
gatt.writeCharacteristic(characteristic);
Вызов writeCharacteristic()
вызовет его "нормальный" обратный вызов. Параметр characteristic
содержит фактическое, записанное значение, которое можно проверить:
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
...
if(characteristic.getValue() != value) {
gatt.abortReliableWrite();
} else {
gatt.executeReliableWrite();
}
...
}
Выполнение надежной записи вызовет обратный вызов onReliableWriteCompleted (BluetoothGatt gatt, int status).
Первый ответ на StackOverflow, 'надеюсь, что кто-то найдет его полезным.