BLE разный MTU для разных реализаций

Я пробовал разные реализации подключения BLE на Android. Один с RxAndroidBle, а другой с простым Android API. Я использовал пример приложения RxAndroidBle для тестирования. Подключаюсь к тому же периферийному устройству с тем же сервисом и характеристикой. Хотя, когда я читаю или получаю уведомления от него, в случае RxAndroidBle я получаю 512 байт, а в случае Android API - всего 20. Я пытаюсь запросить MTU 512, но onMtuChanged никогда не вызывается, и я все равно получаю 20. Я что-то упускаю ?


person Nataliya Le Loup    schedule 27.05.2018    source источник
comment
Когда вы вызываете requestMtu, результат true или false?   -  person stkent    schedule 27.05.2018
comment
результат true   -  person Nataliya Le Loup    schedule 27.05.2018
comment
Вы обрабатываете исключения в onMtuChanged? Если я правильно помню, они проглатываются по умолчанию. Может там что-то прячется...   -  person stkent    schedule 27.05.2018
comment
метод никогда не вызывается, единственное, что я вижу в логах: D/BluetoothGatt: configureMTU() - device: B8:**** mtu: 512 D/BtGatt.GattService: configureMTU() - address=B8:*** mtu=512 E/bt_btif: No pending command   -  person Nataliya Le Loup    schedule 28.05.2018
comment
На самом деле, когда я также пытаюсь позвонить requestConnectionPriority, я получаю следующее: W/bt_l2cap: L2CA_UpdateBleConnParams - unknown BD_ADDR ********** E/bt_btif: Update connection parameters failed! Есть идеи по этому поводу?   -  person Nataliya Le Loup    schedule 28.05.2018
comment
Без понятия, извини :/   -  person stkent    schedule 28.05.2018
comment
Возможно, вы пытаетесь выполнить все запросы одновременно?   -  person Dariusz Seweryn    schedule 28.05.2018
comment
Нет, я также пытался вызывать requestConnectionPriority только после установления соединения: `if (newState == BluetoothProfile.STATE_CONNECTED) { boolean req = mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_BALANCED); Log.i(TAG, Подключено к серверу GATT и requestConnectionPriority: +req); } else if `по-прежнему получают те же результаты   -  person Nataliya Le Loup    schedule 28.05.2018
comment
Попробуйте всегда вызывать bluetoothGatt из одного и того же потока — в некоторых реализациях это может быть проблемой.   -  person Dariusz Seweryn    schedule 29.05.2018
comment
Есть новости по твоему делу?   -  person Dariusz Seweryn    schedule 05.06.2018
comment
Я еще не уверен на 100%, но думаю, что это как-то связано с связыванием и настройкой параметра BluetoothDevice.TRANSPORT_LE при подключении к периферийному устройству.   -  person Nataliya Le Loup    schedule 06.06.2018
comment
Это может быть связано. Различные версии/реализации стека Android BLE обрабатывают двухрежимные устройства по-разному. Обычно лучшая обработка (в сценариях LE) достигается, когда требуется TRANSPORT_LE, но это не всегда может быть case возможно из-за неправильной реализации периферии. Не стесняйтесь добавлять дополнительную информацию, когда она доступна.   -  person Dariusz Seweryn    schedule 09.06.2018
comment
да, кажется, что поскольку я установил этот параметр TRANSPORT_LE, используется максимальный MTU, даже если я не устанавливаю его явно. Мое устройство действительно работает в двойном режиме. Благодарю вас!   -  person Nataliya Le Loup    schedule 14.06.2018