При нормальном чтении характеристик будет считан только размер MTU (20 байтов) данных. Мой заказчик предложит характеристики большего размера (около 100 байт).
Я видел, что BLE предлагает функцию «долгого чтения», которая считывается до тех пор, пока не будет достигнут размер характеристик. (https://bluegiga.zendesk.com/entries/25053373--REFERENCE-BLE-master-slave-GATT-client-server-and-data-RX-TX-basics)
Команда attclient_read_long — запускает процедуру, в которой клиент сначала отправляет на сервер обычный запрос на чтение, и если сервер возвращает значение атрибута с длиной, равной BLE MTU (22 байта), то клиент продолжает отправлять «длинные» запросы на чтение пока остальная часть атрибута не будет прочитана. Это применимо только в том случае, если вы читаете атрибуты, длина которых превышает 22 байта. Часто проще построить сервер GATT так, чтобы для простоты не было длинных атрибутов. Обратите внимание, что протокол BLE по-прежнему требует, чтобы данные были упакованы в макс. 22-байтовые фрагменты, поэтому использование «длинного чтения» не экономит время передачи.
Но как я могу использовать эту функцию в Android? Класс BluetoothGatt предлагает только простое «Чтение ()» - то же самое для iOS.
Увеличение MTU невозможно, так как нам необходимо поддерживать устройства с AP Level ‹ 21 (увеличение MTU было введено в API 21)