Android BLE requestMtu(), похоже, не работаетAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android BLE requestMtu(), похоже, не работает

Сообщение Anonymous »

Введение
Я занимаюсь разработкой приложения для Android, которое управляет физическим устройством через BLE.
Один Одной из особенностей приложения является отправка большого объема данных. Моя цель — попытаться оптимизировать этот поток данных.
Современное состояние
Я создал тестовую активность с несколькими кнопками для основных функций.
На уровне класса я объявил объекты, которые будут использоваться:

Код: Выделить всё

private BluetoothManager mBluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothLeScanner mBluetoothLeScanner;
private BluetoothGatt mBluetoothGatt = null;
Эти объекты инициализируются в методе onCreate

Код: Выделить всё

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)
значение mtu всегда равно 220
Более того, на стороне устройства я не могу найти никаких следов каких-либо новых переговоров. >
Время вопросов
Почему приложение всегда возвращает значение 220?
Как увеличить значение?
requestMtu(515), похоже, не работает.
Примечание. Я использовал несколько планшетов с Android 6. , 8, 10, 12 и 14, но обмениваемое значение всегда равно 220.
Кто-нибудь знает, что происходит и как это можно решить?
Спасибо всем

Подробнее здесь: https://stackoverflow.com/questions/787 ... em-to-work
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»