2012-07-12 61 views
0

我嘗試打開一個套接字來偵聽來自非android設備的連接。Obex推送配置文件的UUID

Parcelable[] uuidExtra = device.getUuids(); 
String t = uuidExtra[0].toString(); 
t = t.toUpperCase(); 
Log.i("UUID: ", t); 

此codesnippet會給我的藍牙設備提供的服務的UUID。從logcat的輸出是:

00001105-0000-1000-8000-00805F9B34FB 

我相信這是OBEX對象推送模式的UUID。我認爲這是因爲該設備的製造商告訴我該設備僅支持協議:Obex Push Profile。

當我嘗試在我Parcelable[]陣列訪問例如第二元素,輸出只會

07-12 13:29:36.305: E/AndroidRuntime(6293): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 

通過,我可以肯定地說,我的陣列只包含一個對象

因此,以更多的Android特定藍牙的東西。

我'使用這個UUID是這樣的:

try { 
     tmp = adapter.listenUsingRfcommWithServiceRecord(device.getName(), UUID.fromString(t)); 
     } catch (IOException e) { 
      Log.e(TAG, "FAILED BECAUSE: " + e.getMessage()); } 

異常輸出以下,以logcat的:

FAILED BECAUSE: Not able to register SDP record for: "name of the device" 

了幾個小時後,谷歌搜索這個例外,我還是想不通了解如何爲設備打開偵聽套接字。

有什麼建議嗎?提前致謝!

+0

這似乎是在某些設備上間歇性發生的低級別藍牙問題,大多數遇到此異常的人員通過重新啓動設備或更新固件後解決了這個問題。 – BFil 2012-07-16 09:47:36

+0

感謝您的回答,ShadowCloud!我試過重新啓動手機和藍牙設備,但沒有幫助。不管怎麼說,還是要謝謝你。 – 2012-07-17 11:01:57

回答

1

所以,如果有人是好奇,還是面臨着同樣的問題,因爲我所做的,這裏是解決方案:

錯誤:Not able to register SDP record for: "name of the device"會因爲你試圖用AA UUID創建一個服務被拋出這已經被採用了。在這種情況下,我想註冊自己的服務,與同UUIDObex Object Push

我有什麼做的,就是註冊自己的服務,以自定義的UUID,例如

d1b180c0-d7bc-11e1-9b23-0800200c9a66 

該UUID從this網頁生成。至於現在你已經創建了一個新的監聽套接字:

 try { 
     tmp = adapter.listenUsingInsecureRfcommWithServiceRecord("My Profile", UUID.fromString("d1b180c0-d7bc-11e1-9b23-0800200c9a66")); 
     } catch (IOException e) { 
      Log.e("FAILED BECAUSE:", e.getMessage()); 
     } 
     mmServerSocket = tmp; 

而且我們現在已經準備好接受進來的請求,這種方式:

socket = mmServerSocket.accept(); 

Remeber,這是一個阻塞調用,因此對於自己和你的用戶請把這個放在thread

那麼爲什麼heck沒有將我的設備連接到android服務器?

  1. 你確定遠程設備/客戶端使用相同的UUID作爲服務器?

  2. 如果您不能指定遠程設備的UUID,請聯繫製造商,或許我們已經足夠向您發送配置文件了,這是我的情況。

如果有任何問題,請在此貼文中添加評論。我會接受這個答案,因爲沒有人能夠解決這個問題。

+0

非常感謝您的回答有幫助。我的應用成功第一次使用UUID連接到其他設備,但之後它重複拋出異常,可能是因爲我沒有正確關閉套接字。有什麼方法可以掃描SDP數據庫並刪除該條目? – 2014-06-17 08:55:13