2011-03-23 97 views
0

我正在編寫一個針對API 7(我的設備是API 8-2.2)的藍牙應用程序。當我嘗試連接藍牙套接字時,彈出窗口提示用戶與設備配對,但有時連接超時或失敗。在這些情況下,彈出消失而不點擊任何內容,但設備在藍牙設置中顯示爲「配對但未連接」。即使連接失敗,Android藍牙配對設備

如果我直接從藍牙設置連接到藍牙設備,則不會發生;如果用戶實際點擊「Pair」,設備只會顯示「配對但未連接」。

下面是商建立連接的代碼,它似乎很簡單:

try { 
     BluetoothDevice btDevice = _btAdapter.getRemoteDevice(address); 
     _btAdapter.cancelDiscovery(); 
     sock = btDevice.createRfcommSocketToServiceRecord(SafConstants.BT_UUID); 
     sock.connect(); 
    } catch (IOException e) { 
     logger.error("socket connection failed", e); 
     if (sock != null) { 
      try {sock.close();} 
      catch (IOException e1) {} 
     } 
    } 

這是一個Android的問題還是我應該做點別的?我搜索了API以查看是否可以從綁定設備集中移除設備(如果連接失敗),但似乎這是不可能的。

編輯:我注意到的一件事是,當我嘗試通過我的應用程序進行連接時,筆記本電腦上會提示它正在嘗試在配對之前訪問耳機服務。幾秒鐘後,我終於會在我的筆記本電腦上看到設備正在嘗試配對的提示。

如果我通過藍牙設置進行連接,則會提示首先配對設備,然後成功提示設備嘗試訪問耳機服務。我不確定這是否重要...

+0

什麼UUID您使用的?耳機? – 2011-03-23 16:16:02

+0

@ Dennis Mathews:我使用的是「00001101-0000-1000-8000-00805F9B34FB」,這是建議的[這裏](http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#createRfcommSocketToServiceRecord% 28java.util.UUID%29)。如果我使用隨機UUID,則根本無法連接到我的筆記本電腦,並且出現「服務發現失敗」異常。 – ravun 2011-03-23 17:43:34

+0

這並不總是適用於每部手機,因爲有些手機甚至不會讓您手動配對,而且連接時不會顯示的彈出對話框。如果Android操作系統不要求配對代碼,我已經嘗試了許多藍牙配對的解決方法,並且主要打磚牆。希望谷歌可以解決這個問題,爲傳統的藍牙。 – JPM 2011-06-09 17:02:25

回答

1

您使用的UUID是SPP(串行端口配置文件),並且作爲頭戴式耳機,需要藍牙配置文件 - A2DP(高級音頻分配)。 目前,藍牙堆棧的Android實現不支持藍牙配置文件,僅僅是一個簡單的骨骼實現。

要在Android上實現藍牙配置文件支持,有一個名爲「Sybase-iAnywhere-Blue-SDK-for-Android」的項目,該項目取代了Android的版本,並將所有接口提供到底層的藍牙配置文件和協議。使用此功能,可以使用此SDK提供的BPP配置文件,使用Android手機通過藍牙進行打印。

請參閱下面的詳細信息鏈接:

鏈接1: http://www.sybase.com/detail?id=1064424

鏈接2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks