2017-07-31 618 views
1

我的應用程序在某些設備上連接到BluetoothGatt時遇到問題。Android BluetoothDevice connectGatt總是在某些設備上發生錯誤,並且出現錯誤133

所有與BLE相關的代碼都在android中,一切工作正常,除了華爲CAM-L03。據報道,一些舊的三星Galaxy設備也有問題。

我最近發現,在某些設備上,必須在UI線程上執行所有BLE通信。我寫了一個快速測試應用程序,當UI線程中的所有東西都運行時,華爲問題就消失了。

我試圖創建在Service一個Handler與主尺蠖:

final Context context = getApplicationContext(); 
Handler handler = new Handler(context.getMainLooper()); 
handler.post(new Runnable(){ 
    @Override 
    public void run() { 
     BluetoothGatt gatt = device.connectGatt(context, false, callBackHandler); 
     … 
    } 
}); 

但是,這仍然給我GATT_ERROR 133在連接回調,這我有點懷疑,因爲背景是服務,而不是UI應用程序。

我只在這裏看到兩個選項:

  1. 列表項不支持某些設備
  2. 移動一切的UI應用程序支持的所有設備

我不滿足這些都是。是否還有其他我不知道的選項?

+0

請嘗試使用runOnUiThread來代替。 YOu需要一個Activity實例,雖然 – Zoe

+0

就是這樣,我沒有訪問一個Activity。 – unexplored

+0

根據您運行呼叫的線程,沒有什麼區別藍牙呼叫的工作方式。 Android的藍牙API使用Android中的「活頁夾」功能與藍牙服務進行通話。錯誤代碼133只是一個普通的錯誤代碼,意味着它沒有成功。 onConnectionChange回調中錯誤代碼爲133的最常見原因之一是連接嘗試超時。 – Emil

回答

1

我覺得問題實際上是什麼以及如何解決它。我添加了我的答案,作爲對連接嘗試拋出的通用gatt錯誤(133)的另一個檢查,因爲我沒有發現對相同問題的暗示。

我被導致了一個錯誤的結論,如this。我認爲這個bug在Android上很久就修復了。我得到連接失敗回調的事實表明,由於回調被註冊,線程問題是無關緊要的。

我遇到的問題與我試圖連接BLE設備時保持藍牙適配器掃描有關。看起來有些手機有問題。

我的應用程序的要求決定了連續掃描服務運行的時間,我所有的測試電話都沒有問題。這種華爲模式雖然會拒絕連接。

TL; DR在嘗試連接之前停止掃描,斷開連接後根據需要重新啓動掃描。

+1

是的,我們也注意到了這一點,但只有一部手機,即華爲P8 Lite。你有哪個手機發生這個問題? – Emil

+0

@Emil我在問題中提到過 - 華爲CAM-L03。我認爲我們在HTC設備上遇到了同樣的問題,但由於我沒有一個設備,我無法確認。 – unexplored

+0

哦,對不起,我錯過了。無論如何,如果有人感興趣,華爲P8 Lite中的藍牙控制器就是問題的根源。主機堆棧告訴控制器同時掃描和連接,並以成功狀態回覆。但是,直到您停止掃描後,它仍然無法連接。 – Emil

相關問題