Android有没有办法使用特定端口连接到蓝牙设备而不是使用服务UUID? 我知道这个选项可以在其他提供蓝牙支持的平台上使用(例如,Java ME通过指定“btspp://”样式URL)。
谢谢!
答案 0 :(得分:8)
好的,已经有一段时间了,但我找到了问题的解决方案。我实际上打算放弃并使用UUID,但我一直收到服务发现失败(IO)异常,当我试图找到服务发现问题的解决方案时,我找到了原始问题的解决方案...... Ain'生活中的东西?:)
无论如何,this is the link I stumbled upon,虽然您应该注意到答案中存在错误(它们实际上只是连接到端口1,而不是使用服务UUID)。
在这篇简短的历史课后,这是解决方案:
使用反射,可以创建连接到端口号而不是UUID的Rfcomm套接字:
int bt_port_to_connect = 5; // just an example, could be any port number you wish
BluetoothDevice device = ... ; // get the bluetooth device (e.g., using bt discovery)
BluetoothSocket deviceSocket = null;
...
// IMPORTANT: we create a reference to the 'createInsecureRfcommSocket' method
// and not(!) to the 'createInsecureRfcommSocketToServiceRecord' (which is what the
// android SDK documentation publishes
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
deviceSocket = (BluetoothSocket) m.invoke(device,bt_port_to_connect);
需要注意的一些事项:
祝所有人好运。
答案 1 :(得分:0)
蓝牙Android连接仅通过UUID完成。每个蓝牙设备都为其运行的每项服务都有一个UUID(参见蓝牙SDP)。
你只需给Android注意UUID,在客户端模式下,它会找到一个自动连接的套接字(包括端口)。在服务器模式下,它将等待指定的设备使用指定的UUID启动连接。 建立连接时,BluetoothSocket对象也有效(使用getInput / Output Stream) 请参阅Server Socket documentation和Client Socket documentation。
如果你真的想检查一切,你可以看到Android从其他设备的SDP和你提供的UUID解码。
使用this tutorial获取蓝牙界面(非常容易)。 那么代码看起来应该是这样的:
IBluetooth ib =getIBluetooth();
Int otherDevicePort = ib.getRemoteServiceChannel(otherDeviceAddress, UUID);
答案 2 :(得分:0)
我使用bluecove,允许我使用Connector.open()
函数执行此操作。
我使用以下网址:
btspp://" + phoneID + ":" + phonePort
N.b。:可以添加一些选项(例如:authenticate=false;
或encrypt=false;
)。
phoneID
是蓝牙地址,phonePort
是端口号。
如何查找蓝牙地址? 从link:
开始
- 在主屏幕中,打开应用程序抽屉,然后打开“设置”。
- 选择“系统”。 (在某些型号上略过这一步)
- 向下滚动到底部,然后点按“关于手机”,“关于设备”或“关于平板电脑”。
- 向下滚动到底部,然后点按“状态”。
- 向下滚动,“蓝牙地址”将显示在列表中。
醇>
如何查找端口号? 我还没有找到应该使用的端口...... 我使用5并且它有效,但我需要研究为什么如果我想要更换手机,我需要知道是否还需要更换端口。