7

Ho un app che funziona alla grande su un Samsung S3 Android 4.3 ma ho hanno problemi su una Moto G in esecuzione 4.4.4Android 4.4.4 Moto G Bluetooth LE ricollegare problema

mio BLE collega periferiche e si disconnette più volte durante l'utilizzo delle app. Funziona bene, tuttavia a volte arriva un punto in cui l'app/telefono non si ricollega più alla periferica.

Tutti i comandi gatt vengono eseguiti sulla filettatura principale, ad es.

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(); 
    } 
}); 

e la periferica si disconnette. Quando questo accade e non posso ricollegare alla periferica più, ho carichi di log di come questo:

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 

e ho bisogno di smettere l'applicazione, attivare il Bluetooth spento e riacceso per poter iniziare a lavorare correttamente ancora.

Eventuali problemi noti, suggerimenti o consigli?

Grazie

EDIT ----------- Dopo un po 'di più test, sembra che lasciare l'applicazione in esecuzione, alla fine ottengo i seguenti registri e poi la mia periferica possono riconnettersi di nuovo:

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 

Sembra che abbia qualcosa a che fare con il WiFi ?!

+0

nel codice, disconnetti il ​​tuo gat dalla condizione if(). Può essere questo? – Apollo

+0

Avrò un controllo, ma il codice è impostato per essere eseguito in un MainLooper, quindi dovrebbe sempre essere vero. – Darren

+0

Viene sempre chiamata la disconnessione di Gatt, quindi non è questo il problema. Ho aggiunto una modifica alla mia domanda sopra. Thx – Darren

risposta

4

Penso che non ci sarà una risposta facile come "usa Main Thread" e tutto è OK. Ma posso darvi alcuni suggerimenti che ho raccolto durante il lavoro con scadente BLE Android:

  • pila BT sarà diverso sui telefoni diversi, purtroppo Moto G è uno dei maggior parte dei telefoni crappiest se stiamo parlando di BLE ... che schifo? Tile app afferma anche nella loro F.A.Q What Android phones will Tile work with:

funziona solo con Samsung Galaxy S5, HTC One M8, HTC One, LG Nexus 4, LG Nexus 5, LG Nexus 6, Samsung Note 4, Motorola Moto X e certamente non funziona con 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. 
2

Si tratta di un problema specifico MotoG, ho incontrato lo stesso su dispositivi MotoG in precedenza. Da quando Bluetooth Low Energy non è stato abbastanza maturo, la funzionalità Wifi e Bluetooth, negativamente, si interferiscono a vicenda su quel particolare dispositivo.

Dalla precedente R & D che avevo fatto, non so se si tratta di una versione del sistema operativo specifica combinazione & dispositivo, ma ci sono stati alcuni problemi relativi a Bluetooth e Wifi, ancora di più con Bluetooth Low Energy e Wifi, molti hanno stato specifico del dispositivo.

Per quanto riguarda ciò che si sta affrontando, ci sono problemi su Progetto open source Android - Issue Tracker e anche altri blog;

Issue 39995
Issue 41631

Nexus 5, Nexus 4 and Nexus 7 (2013) Android 4.4 Bluetooth Issues
[Anche se non ho affrontato tale questione in Nexus 5]

Indipendentemente dal numero di connessioni, il Wifi effetti bluetooth a basso consumo energetico. Inoltre, la riconnessione e il timeout per una connessione possono essere proprietà anche dal lato hardware.

Il tuo codice va bene, spero che tu risparmi un po 'di tempo, ho passato un po' di tempo con MotoG e qualche altro dispositivo; precisamente il caso delle interferenze bluetooth a basso consumo energetico e wifi mentre interagiscono con dispositivi ble, attraverso il framework BluetoothGatt e iBeacon.