A.
如題,呼叫BluetoothGatt.discoverServices()返回true了,但是一直沒走到onServicesDiscovered回撥中,用Ble除錯藍芽助手測試了,也是一樣的情況,所以應該是外設的問題,但是ios的沒問題,藍芽處理還是有差別,網上有一種方式說是延遲去多discoverServices幾次,可能可以找到,嘗試了一下還是不行,最後用了下面的方式基本可以解決:
加多個標誌,就是連線裡面加多個5s的延遲操作,如果5s後還沒走回撥,就重新發起連線,測試基本沒問題,雖然解決了但是不知道什麼原因導致的,有知道的老哥可以留言下
mHandler.postDelayed(new Runnable() { @Override public void run() { if(!isDiscoverServices){//如果還沒找到服務-執行重連 connectDevice(device,context); } } },5000); @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { super.onServicesDiscovered(gatt, status); isDiscoverServices=true; }
https://blog.csdn.net/Canra/article/details/124979522
B.
1.呼叫gatt.discoverService需要寫在onConnectionStateChange方法裡面。
2.延時多呼叫幾次discoverService方法。
https://blog.csdn.net/aozhenmo2498/article/details/101411611
C.
在網上搜尋到方案是在gatt.discoverServices()之前加延時也只能部分解決問題,當時估計應該是執行緒問題。後來將涉及到UI執行緒的控制元件更新去除,無需延時完美解決。
https://blog.csdn.net/hujiusi185/article/details/106681636/
refs:
Android BLE 藍芽程式設計(一)
https://www.cnblogs.com/wobeinianqing/p/5838273.html
Android BLE 藍芽程式設計(二)
https://www.cnblogs.com/wobeinianqing/p/5879851.html
Android BLE 藍芽程式設計(三)
https://www.cnblogs.com/wobeinianqing/p/5883135.html
Android BLE 藍芽程式設計(四)
https://www.cnblogs.com/wobeinianqing/p/5886756.html
================================
Android BLE開發指南(一)入門基礎
https://blog.csdn.net/kuaiguixs/article/details/90755223
Android BLE開發指南(二)中心裝置端程式開發詳解
https://blog.csdn.net/kuaiguixs/article/details/91437759
Android BLE 藍芽開發指南(三)外圍裝置端開發詳解
https://blog.csdn.net/kuaiguixs/article/details/91886524