У нас также была эта проблема в проекте, и мы обнаружили, что на нормальную передачу данных влияет размер MTU, в то время как размер уведомлений остается на уровне 20 байтов.
В спецификации Bluetooth, том 3, часть F, раздел 3.4.7.1 указано (спасибо комментарий от Эмиля):
Сервер может отправлять уведомление о значении атрибута в любоевремя.Размер значения атрибута составляет от 0 до (ATT_MTU-3)
Но ниже таблицы также указано:
Примечание: для клиента, чтобы получить длинный атрибут, ондолжен будет использовать запрос чтения BLOB-объектов после получения этого уведомления.
Меня это немного смущает.Что означает «длинный»?Больше, чем размер MTU по умолчанию?Или дольше, чем согласованный размер MTU?
В конце мы попытались, но у нас не получилось.Теперь мы используем уведомление в качестве триггера, а затем наше приложение должно активно прочитать характеристику.
Обратите внимание, что на Android вам также нужно активно устанавливать размер MTU из вашего приложения.В противном случае телефон останется на 20 байтах.iPhone делает это автоматически.