Android BLE & BluetoothGattCallback.onServicesDiscovered不回撥或部分回撥解決

petercao發表於2024-09-05

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

相關文章