Проблема повторного подключения Android 4.4.4 Moto G Bluetooth LE

У меня есть приложение, которое отлично работает на Samsung S3 под управлением Android 4.3, однако у меня возникают проблемы с Moto G под управлением 4.4.4.

Мое периферийное устройство BLE подключается и отключается несколько раз во время использования приложений. Это работает нормально, однако иногда наступает момент, когда приложение/телефон больше не подключается к периферийному устройству.

Все команды gatt выполняются в основном потоке, например.

final BluetoothGatt gat = gatt;
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
  // This code will be executed on the main thread
  if (Looper.myLooper() == Looper.getMainLooper()) {
    Log.e(TAG, "mGattCallback disconnect2: NOW ON MAIN THREAD :)");
  }
  gat.disconnect();
  }
});

и периферия отключается нормально. Когда это происходит, и я больше не могу повторно подключиться к периферийному устройству, я получаю множество журналов, подобных этому:

04-07 16:57:56.798: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.798: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:56.833: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.833: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:56.871: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.871: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:56.906: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.906: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:56.941: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.941: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:56.977: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:56.977: I/bt-hci(2127): btu_ble_process_adv_pkt
04-07 16:57:57.016: I/bt-hci(2127): BLE HCI(id=62) event = 0x02)
04-07 16:57:57.016: I/bt-hci(2127): btu_ble_process_adv_pkt

и мне нужно выйти из приложения, выключить и снова включить Bluetooth, чтобы он снова начал работать правильно.

Любые известные проблемы, советы или рекомендации?

Спасибо

РЕДАКТИРОВАТЬ ----------- После некоторого дополнительного тестирования кажется, что, оставив приложение запущенным, в конце концов я получаю следующие журналы, а затем мое периферийное устройство может снова подключиться:

04-13 19:11:53.973: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:53.973: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:54.076: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:54.076: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:55.986: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:55.986: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:56.087: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:56.087: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:56.629: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:56.629: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:56.734: I/bt-hci(2034): BLE HCI(id=62) event = 0x02)
04-13 19:11:56.734: I/bt-hci(2034): btu_ble_process_adv_pkt
04-13 19:11:58.925: D/MDMCTBK(275): reply_len: 40 reply is = IFNAME=wlan0 <3>CTRL-EVENT-SCAN-RESULTS 
04-13 19:11:58.925: D/MDMCTBK(275): Event received = CTRL-EVENT-SCAN-RESULTS 
04-13 19:11:58.926: D/WifiStateMachine(1010): handleMessage: E msg.what=147461
04-13 19:11:58.926: D/WifiStateMachine(1010): processMsg: DisconnectedState
04-13 19:11:58.926: D/WifiStateMachine(1010): processMsg: ConnectModeState
04-13 19:11:58.926: D/WifiStateMachine(1010): processMsg: DriverStartedState
04-13 19:11:58.927: D/WifiStateMachine(1010): processMsg: SupplicantStartedState
04-13 19:11:58.928: D/TCMD(4253): NL - Read 56 bytes from update socket.
04-13 19:11:58.928: D/TCMD(4253): NL - message type is RTM_NEWLINK
04-13 19:11:58.928: D/TCMD(4253): Listening for incoming client connection request
04-13 19:35:18.787: V/AlarmManager(1010): sending alarm Alarm{42b84cc0 type 2 com.google.android.gms}
04-13 19:35:18.787: V/AlarmManager(1010): sending alarm Alarm{42b83a00 type 0 android}
04-13 19:11:58.941: D/WifiStateMachine(1010): handleMessage: X
04-13 19:12:00.615: D/WifiStateMachine(1010): handleMessage: E msg.what=131143
04-13 19:12:00.615: D/WifiStateMachine(1010): processMsg: DisconnectedState
04-13 19:12:00.616: D/WifiStateMachine(1010): processMsg: ConnectModeState
04-13 19:12:00.617: D/WifiStateMachine(1010): processMsg: DriverStartedState
04-13 19:12:00.628: D/WifiStateMachine(1010): handleMessage: X
04-13 19:12:01.425: D/MDMCTBK(275): reply_len: 40 reply is = IFNAME=wlan0 <3>CTRL-EVENT-BSS-REMOVED 1
04-13 19:12:01.425: D/MDMCTBK(275): Event received = CTRL-EVENT-BSS-REMOVED 1
04-13 19:12:01.425: D/MDMCTBK(275): reply_len: 40 reply is = IFNAME=wlan0 <3>CTRL-EVENT-SCAN-RESULTS 
04-13 19:12:01.425: D/MDMCTBK(275): Event received = CTRL-EVENT-SCAN-RESULTS 
04-13 19:12:01.425: D/WifiStateMachine(1010): handleMessage: E msg.what=147461
04-13 19:12:01.426: D/WifiStateMachine(1010): processMsg: DisconnectedState
04-13 19:12:01.426: D/WifiStateMachine(1010): processMsg: ConnectModeState
04-13 19:12:01.426: D/WifiStateMachine(1010): processMsg: DriverStartedState
04-13 19:12:01.426: D/WifiStateMachine(1010): processMsg: SupplicantStartedState
04-13 19:12:01.428: D/MDMCTBK(275): reply_len: 40 reply is = IFNAME=p2p0 <3>CTRL-EVENT-BSS-REMOVED 1 
04-13 19:12:01.428: D/MDMCTBK(275): Event received = CTRL-EVENT-BSS-REMOVED 1 
04-13 19:12:01.428: D/TCMD(4253): NL - Read 56 bytes from update socket.
04-13 19:12:01.428: D/TCMD(4253): NL - message type is RTM_NEWLINK
04-13 19:12:01.428: D/TCMD(4253): Listening for incoming client connection request
04-13 19:12:01.444: D/WifiStateMachine(1010): handleMessage: X

Похоже, это как-то связано с WiFi?!


person Darren    schedule 07.04.2015    source источник
comment
в вашем коде вы отключаете свой gat от условия if(). Может быть это?   -  person Apollo    schedule 13.04.2015
comment
У меня будет проверка, но код настроен на выполнение в MainLooper, поэтому он всегда должен быть правдой.   -  person Darren    schedule 13.04.2015
comment
Отключение Гатта всегда вызывается, так что это не проблема. Я добавил правку к моему вопросу выше. Спасибо   -  person Darren    schedule 13.04.2015
comment
Вы нашли решение? В настоящее время я борюсь с Moto G первого поколения и второго поколения с 5.0 и 5.1 соответственно.   -  person Roberto Betancourt    schedule 10.12.2015
comment
Нет, мы просто не поддерживаем это устройство.   -  person Darren    schedule 10.12.2015


Ответы (2)


Думаю простого ответа типа "использовать Main Thread" не будет и все ОК. Но я могу дать вам несколько советов, которые я почерпнул, работая с дрянным Android BLE:

будет работать только с Samsung Galaxy S5, HTC One M8, HTC One, LG Nexus 4, LG Nexus 5, LG Nexus 6, Samsung Note 4, Motorola Moto X и уж точно не будет работать с Moto G

Bluedroid continues to mature and stabilize; there were 565 commits to the bluedroid project alone from 4.4 -> 5.0, compared with 52 commits from 4.3 -> 4.4, and 47 commits from 4.2 -> 4.3.* This is an area of heavy activity within AOSP right now.
person Marian Paździoch    schedule 15.04.2015

Это специфическая проблема MotoG, я сталкивался с тем же на устройствах MotoG ранее. С тех пор, как Bluetooth Low Energy не был достаточно зрелым, функции Wi-Fi и Bluetooth отрицательно мешают друг другу на этом конкретном устройстве.

Из предыдущих исследований и разработок, которые я провел, не уверен, является ли это комбинацией версии ОС и конкретного устройства, но были некоторые проблемы, связанные с Bluetooth и Wi-Fi, даже больше с Bluetooth Low Energy и Wifi, многие из которых были специфичными для устройства.

Что касается того, с чем вы столкнулись, есть проблемы в Android Open Source Project — средство отслеживания проблем и в других блогах;

Ошибка 39995
Ошибка 41631

Nexus 5, Nexus 4 и Nexus 7 (2013 г.) Android 4.4 Проблемы с Bluetooth
[хотя я не сталкивался с этой проблемой в Nexus 5]

Независимо от количества подключений Wi-Fi влияет на низкое энергопотребление Bluetooth. Кроме того, переподключение и время ожидания для соединения также могут быть свойствами со стороны оборудования.

Ваш код в порядке, надеюсь, вы сэкономите немного времени, я потратил некоторое время на это с MotoG и несколькими другими устройствами; именно в случае Bluetooth с низким энергопотреблением и помехами Wi-Fi при взаимодействии с ble-устройствами через BluetoothGatt и iBeacon framework.

person Pararth    schedule 15.04.2015