2012-06-11 104 views
1

我正在創建一個連接到藍牙條碼掃描器的Android應用程序。我一直在尋找如何做到這一點的代碼示例,但我找不到任何連接到設備的處理。我看到很多與Android設備連接對等設備,但似乎並沒有涵蓋Android到設備。以編程方式連接到藍牙條碼掃描器Android

這是我到目前爲止的代碼。它在連接被拒絕的連接時失敗。

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
socket = mDevice.createRfcommSocketToServiceRecord(uuid); 
socket.connect(); 

06-11 15:29:10.113: W/System.err(20018): java.io.IOException: Connection refused 
06-11 15:29:10.133: W/System.err(20018): at android.bluetooth.BluetoothSocket.connectNative(Native Method) 
06-11 15:29:10.133: W/System.err(20018): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:212) 

該設備與Android手機配對,我用手機檢索它。

Set<BluetoothDevice> pairedDevices = btAdapter.getBondedDevices(); 
+0

您在掃描儀文檔中找不到? – Guillaume

+0

在嘗試連接之前是否真的與設備配對? – dymmeh

+0

設備已配對是。 –

回答

0

createInsecureRfcommSocketToServiceRecord是一個很好的提示。

我在連接到Bluegiga WT32-A藍牙模塊時遇到問題。 我的舊代碼是基於藍牙聊天實例中(該工作正常與BTM 222藍牙模塊),並使用createRfcommSocketToServiceRecord,與連接的結果被拒絕:

java.io.IOException: Connection refused 

古怪,試圖通過createRfcommSocketToServiceRecord重新連接,再次,在很短的時間內,有時工作。

另一件事要注意:使用createInsecureRfcommSocketToServiceRecord需要API級別10

1

此ID只有在條形碼掃描儀提供標準藍牙SPP接口時纔有效。你確定這個設備甚至使用這個UUID嗎?

去尋找任何文件連接本掃描儀的東西 - 即使只是一臺PC。儘管這不是你現在想要做的事情。您可能會了解該系統的某些內容,或瞭解其實際工作原理。

例如,如果PC安裝了一個特殊的驅動程序來使其做任何事情,都會指出它不是SPP配置文件。或者,如果有一臺PC應用程序與連接到「串行端口」的掃描儀一起工作,那麼它幾乎肯定是SPP配置文件。

如果它不是一個SPP配置文件,有一個像PC一樣的工作連接,至少會給你一個機會來嗅探連接,也許還有數據傳輸,以反向設計android的東西。

此外,通過基線檢查硬件適用於某個特定應用程序,您可以排除硬件故障。 (檢查你的Android設備的藍牙鏈接,而你在它!)

+1

+1,我想補充一點,如果你可以用4.0.3設備測試,你可以使用'fetchUuidsWithSdp()'方法來發現你的設備的UUID值。如果沒有,這裏是一篇博客文章,可以幫助您發現早期版本的UUID:http://wiresareobsolete.com/wordpress/2010/11/android-bluetooth-rfcomm/ – Devunwired

+0

是的,這是正確的UUID。如果我使用不正確的呼叫,則創建套接字的調用將失敗,並顯示服務發現失敗。但是我確實得到了這個工作,請參閱下面的答案。 感謝您的博客文章,這對我將來的工作非常有用。 –

0

另一種可能性 - 發佈作爲第二個答案,因爲它是非常不同於我的最後。

您只給出了有關您計劃在目前技術上做的事情的信息,而不是您嘗試編寫的應用程序的實際用途。

如果您的應用程序的目的不僅僅是藍牙連接或僅僅使用特定的條形碼讀取器,並且將條形碼值輸入到Android設備中只是實現更大目的的一個步驟 - 您是否考慮過使用該設備的攝像頭,而不是條形碼閱讀器?

我相信有庫,可以解決這個問題,或者敵營自己的圖像處理代碼可能是有趣(我知道有現有的應用程序,做到這一點了,所以它可能某種方式或其他方式)

+0

我需要實際支持這兩種類型的掃描。我正在構建的這個應用程序將用於掃描條形碼始終發生且需要快速的倉庫,因此是環形掃描儀。 但是,它需要能夠使用內置攝像頭進行掃描。儘管環形掃描儀速度較慢,但​​價格更便宜,1000美元或更多。 –

1

我沒找到這個問題的解決方案,但我不確定爲什麼這個工作,其他沒有。

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 
socket = mDevice.**createInsecureRfcommSocketToServiceRecord(uuid);** 
socket.connect(); 

更改爲使用不安全的調用允許連接工作,並且我可以從套接字讀取調用接收數據。

+1

這很奇怪...將bluetoothChat的一份拷貝到您的工作區中,並查看是否可以將其連接到掃描儀,只需將UUID更改爲正確的SPP。我對createRfcommSocketToServiceRecord()方法沒有問題。你使用的是什麼API版本? –

0

我有同樣的問題,解決它。 首先,將您的條形碼掃描儀模式從HID更改爲SSP。 HID(人機界面模式)僅適用於硬件鍵盤模式。

接下來,從輸入設備關閉藍牙硬件。 設置>藍牙>藍牙條碼罐頭製造商設置> 取消選中輸入設備

使用UUID UUID.fromString( 「00001101-0000-1000-8000-00805F9B34FB」)

就是這樣。