2012-06-11 106 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”)

就是这样。