2

我正在努力创建一个连接到蓝牙条形码扫描仪的 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();
4

5 回答 5

2

我确实找到了解决此问题的方法,但我不确定为什么这个有效而另一个无效。

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

更改为使用不安全调用允许连接工作,并且我可以从套接字读取调用接收数据。

于 2012-06-12T16:54:38.233 回答
1

此 ID 仅在条码扫描器提供标准蓝牙 SPP 接口时才有效。你确定这个设备甚至使用那个 UUID 吗?

去寻找任何用于将此扫描仪连接到某物的文档 - 甚至只是一台 PC。并通过它,即使这不是你现在想要做的。您可能会了解有关该系统的一些信息或了解它的实际工作原理。

例如,为 PC 安装了一个特殊的驱动程序以使其执行任何操作将表明它不是 SPP 配置文件。或者,如果有一个 PC 应用程序用于与连接到“串行端口”的扫描仪一起工作,那么它几乎肯定是一个 SPP 配置文件。

在它不是 SPP 配置文件的情况下,与 PC 之类的东西建立有效连接至少让您有机会嗅探连接,也可能还有数据传输,从而为 android 进行逆向工程。

此外,通过基线检查硬件是否适用于特定应用程序,您可以排除硬件故障。(当你在它的时候检查你的安卓设备的蓝牙链接!)

于 2012-06-12T02:37:28.550 回答
0

另一种可能性 - 作为第二个答案发布,因为它与我的最后一个非常不同。

到目前为止,您只提供了有关您计划在技术上做的事情的信息,而不是您尝试编写的应用程序的实际目的。

如果您的应用程序的目的不仅仅是蓝牙连接的练习或只是使用特定的条形码阅读器,并且将条形码值输入 android 设备只是更大目的的一步 - 您是否考虑过使用设备的相机那个工作而不是条形码阅读器?

我相信有一些库可以处理这个问题,或者 DIY 自己的图像处理代码可能会很有趣(我知道现有的应用程序已经这样做了,所以有可能以某种方式)

于 2012-06-12T08:07:11.213 回答
0

createInsecureRfcommSocketToServiceRecord是一个很好的暗示。

我在连接到 Bluegiga WT32-A 蓝牙模块时遇到问题。我的旧代码基于蓝牙聊天示例(与 BTM 222 蓝牙模块一起工作得很好)并使用createRfcommSocketToServiceRecord了,结果连接被拒绝:

java.io.IOException: Connection refused

createRfcommSocketToServiceRecord奇怪的是,在很短的时间间隔内一次又一次地尝试连接有时确实有效。

还有一点需要注意:使用createInsecureRfcommSocketToServiceRecord需要 API 级别 10。

于 2013-01-15T17:44:51.440 回答
0

我有同样的问题并解决了。首先,将您的条形码扫描仪模式从 HID 更改为 SSP。HID(Human Interface Mode) 仅适用于硬件键盘模式。

接下来,从输入设备关闭蓝牙硬件。设置>蓝牙>蓝牙条码罐设置>取消选中输入设备

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

就是这样。

于 2015-02-05T09:25:20.860 回答