Запрос MTU с подключением Bluetooth Low Energy на Android 4.3-4.4 (API 18-20)
У меня Bluetooth-приложение с низким энергопотреблением, для которого требуется размер MTU выше 23 байт по умолчанию.
Хотя Android представил BluetoothGatt#requestMTU() в API 21, есть ли способ, включая использование частных API, выполнить этот предварительный API 21?
1 ответ
Если у вас есть контроль над периферийным устройством, вы можете отправить запрос MTU (ATT_OP_MTU_REQ, код операции 0x02) с периферийного устройства. Android поддерживает большие MTU GATT (обновление: максимальное значение составляет 517 байт), если запрашивается периферийным устройством, и с радостью отправит ATT_OP_MTU_RESP.
Единственная хитрость заключается в том, что обмен MTU не может перекрываться с фрагментированным чтением / записью. Одним из обходных путей может быть спящий режим на стороне клиента в данный момент квитирования, когда периферийное устройство отправляет запрос MTU. Другой возможный обходной путь - это чтение или запись "магической" характеристики, которая запускает обмен MTU.
Однако с увеличением MTU я гораздо чаще получаю ошибки Status=133, возможно, вызванные более высокой частотой ошибок пакетов с большими пакетами?