我正在尝试连接到RFID读取器设备。我可以通过创建一个BluetoothSocket并在上面调用connect来连接它,如下所示(省略了许多细节):
public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothSocket socket = device.createRfcommSocketToServiceRecord( MY_UUID);
如此多的工作正如预期的那样,并且可以建立与设备的连接。
我的问题是,设备API被设计为与串行端口一起工作。为了使用API,我必须向它传递一个字符串,如下所示:
String uri = "eapi:///com1";
安卓似乎并没有以这种方式向世界开放串行端口。在linux上,我希望能够连接一个字符串,比如:
String uri = "eapi:///dev/ttyS0";
查看手机上的/dev/目录,没有发现任何类似的内容。此外,当我建立连接时,/dev/中的条目不会改变。这让我相信,当安卓连接到蓝牙设备时,它不会在/dev中创建串行设备。
如何访问BluetoothSocket用于连接设备的com端口?安卓系统上有com1或/dev/ttyS0这样的虚拟设备吗?
使用RfcommSocket类的API的旧版本有一个getPort()和getFileDescriptor()方法,这可能会帮助我。目前的蓝牙插座似乎隐藏了这些细节。
提前感谢!
编辑:事实证明,Android根本没有为串行流创建虚拟设备。相反,我直接将客户端代码与bluetoothsocket集成在一起。
如果你有原始蓝牙插座,并且它已经连接,为什么不在代码中手动处理数据格式化/转换,并在没有串行流的情况下将其发送给另一方?安卓操作系统AFAIK支持数量有限的蓝牙配置文件。