Я занимаюсь разработкой приложения для Android, которое управляет физическим устройством через BLE.
Один Одной из особенностей приложения является отправка большого объема данных. Моя цель — попытаться оптимизировать этот поток данных.
Современное состояние
Я создал тестовую активность с несколькими кнопками для основных функций.
На уровне класса я объявил объекты, которые будут использоваться:
Код: Выделить всё
private BluetoothManager mBluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothLeScanner mBluetoothLeScanner;
private BluetoothGatt mBluetoothGatt = null;
Код: Выделить всё
mBluetoothManager = getApplicationContext().getSystemService(BluetoothManager.class);
mBluetoothAdapter = mBluetoothManager.getAdapter();
mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
У меня есть кнопка для вызова startScan() на объекте mBluetoothLeScanner.
/>У меня есть еще одна кнопка для вызова stopScan().
В обратном вызове onScanResult я заполняю HashSet существующих устройств.
После остановки при сканировании я использую раскрывающееся меню, чтобы отобразить все обнаруженные устройства.
Нажав на элемент, я запускаю соединение с выбранным Bluetooth-устройством.
Код: Выделить всё
device.connectGatt(activity, false, gattCallback, BluetoothDevice.TRANSPORT_LE);
При подключении устройство отправляет приложению обмен MTU запрос, то приложение отвечает 220. Если на стороне устройства этот запрос не выполняется, приложение все равно отправляет запрос со значением 220.
Поэтому получается, что так или иначе происходит согласование размера MTU во время соединения происходит обмен 220.
После подключения я получаю объект BluetoothGatt непосредственно из обратного вызова:
Код: Выделить всё
onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
Код: Выделить всё
boolean result = gatt.requestMtu(512);
В любом случае при обратном вызове
Код: Выделить всё
onMtuChanged(BluetoothGatt gatt, int mtu, int status)
Более того, на стороне устройства я не могу найти никаких следов каких-либо новых переговоров. >
Время вопросов
Почему приложение всегда возвращает значение 220?
Как увеличить значение?
requestMtu(515), похоже, не работает.
Примечание. Я использовал несколько планшетов с Android 6. , 8, 10, 12 и 14, но обмениваемое значение всегда равно 220.
Кто-нибудь знает, что происходит и как это можно решить?
Спасибо всем
Подробнее здесь: https://stackoverflow.com/questions/787 ... em-to-work