7

Tôi có một ứng dụng hoạt động tốt trên Samsung S3 chạy Android 4.3 tuy nhiên tôi gặp sự cố trên Moto G đang chạy 4.4.4Android 4.4.4 Moto G Bluetooth LE kết nối lại vấn đề

Kết nối ngoại vi BLE của tôi ngắt kết nối nhiều lần trong quá trình sử dụng ứng dụng. Điều này hoạt động tốt tuy nhiên đôi khi có một điểm mà các ứng dụng/điện thoại không còn kết nối lại với thiết bị ngoại vi.

Tất cả lệnh gatt được chạy trên luồng chính, ví dụ:

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

và ngắt kết nối ngoại vi tốt. Khi điều này xảy ra và tôi không thể kết nối lại với ngoại vi nữa, tôi nhận được vô số tin đăng nhập của như thế này:

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 

và tôi cần để thoát khỏi ứng dụng, bật bluetooth tắt và bật lại cho nó để bắt đầu hoạt động bình thường lần nữa.

Mọi sự cố, mẹo hoặc lời khuyên đã biết?

Cảm ơn

EDIT ----------- Sau một số thử nghiệm nhiều hơn, có vẻ như rời khỏi ứng dụng đang chạy, cuối cùng tôi nhận được các bản ghi sau đây và sau đó ngoại vi của tôi có thể kết nối lại một lần nữa:

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 

Dường như nó liên quan đến WiFi?

+0

trong mã của bạn, bạn ngắt kết nối gat ra khỏi điều kiện if(). Có thể là này? – Apollo

+0

Tôi sẽ có một kiểm tra, nhưng mã được thiết lập để chạy trong một MainLooper, vì vậy nó phải luôn luôn đúng. – Darren

+0

Ngắt kết nối Gatt luôn được gọi, vì vậy đó không phải là vấn đề. Tôi đã thêm bản chỉnh sửa cho câu hỏi của mình ở trên. Thx – Darren

Trả lời

4

Tôi nghĩ rằng sẽ không có câu trả lời dễ dàng như "sử dụng Chủ đề chính" và mọi thứ đều OK. Nhưng tôi có thể cung cấp cho bạn một số gợi ý mà tôi đã thu thập được khi làm việc với Android BLE crappy:

  • BT stack sẽ khác trên điện thoại khác nhau, tiếc là Moto G là một trong những điện thoại crappiest nhất nếu chúng ta nói về BLE ... làm thế nào crappy? Ứng dụng gạch thậm chí khẳng định trong họ F.A.Q What Android phones will Tile work with:

sẽ chỉ làm việc với Samsung Galaxy S5, HTC One M8, HTC One, LG Nexus 4, LG Nexus 5, LG Nexus 6, Samsung Note 4, Motorola Moto X và chắc chắn sẽ không làm việc với 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

Đây là một vấn đề cụ thể MotoG, tôi đã gặp nhau trên các thiết bị MotoG trước đó. Từ khi Bluetooth Low Energy không đủ chín chắn, chức năng Wifi và Bluetooth, bất lợi, gây trở ngại cho nhau trên thiết bị cụ thể đó.

Từ R & D trước tôi đã làm, không chắc chắn cho dù đây là một phiên bản hệ điều hành & thiết bị kết hợp cụ thể nhưng đã có một số vấn đề liên quan đến Bluetooth và Wifi, thậm chí nhiều hơn với Bluetooth Low Energy và Wifi, nhiều người có là thiết bị cụ thể.

Về những gì bạn đang gặp phải, có vấn đề về Dự án nguồn mở Android - Bộ theo dõi sự cố và các blog khác;

Issue 39995
Issue 41631

Nexus 5, Nexus 4 and Nexus 7 (2013) Android 4.4 Bluetooth Issues
[Mặc dù tôi đã không phải đối mặt với vấn đề mà trong Nexus 5]

Không phân biệt số lượng kết nối, các Wifi ảnh hưởng đến năng lượng thấp bluetooth. Ngoài ra, việc kết nối lại và thời gian chờ cho kết nối cũng có thể là các thuộc tính từ phía phần cứng.

Mã của bạn tốt, hy vọng bạn tiết kiệm được chút thời gian, tôi đã dành chút thời gian cho việc đó với MotoG và một vài thiết bị khác; chính xác trường hợp của bluetooth thấp năng lượng và wifi can thiệp trong khi tương tác với các thiết bị ble, thông qua BluetoothGatt và iBeacon khuôn khổ.

Các vấn đề liên quan