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, чтобы он снова начал работать правильно.

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

благодаря

EDIT ———– После еще нескольких тестов кажется, что, оставляя приложение запущенным, в конечном итоге я получаю следующие журналы, а затем мое периферийное устройство снова может снова подключиться:

 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!

Solutions Collecting From Web of "Android 4.4.4 Moto G Bluetooth LE снова подключается"

Я думаю, что не будет легкого ответа вроде «Использовать главную тему», и все в порядке. Но я могу дать вам несколько советов, которые я собрал, работая с дрянным Android BLE:

  • BT-стек будет отличаться на разных телефонах, к сожалению, Moto G – один из самых тяжелых телефонов, если мы говорим о BLE … как дерьмовый? Приложение Tile даже заявляет в своем FAQ. Какие телефоны Android будут работать с Tile :

Будет работать только с 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. 
  • Есть также максимальное количество подключений (7) в Android 4.4 и далее – смотрите около 31 минуты

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

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

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

Выпуск 39995
Выпуск 41631

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

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

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