使用Android连接到蓝牙设备上的特定蓝牙端口

时间:2012-03-14 14:21:17

标签: android mobile bluetooth communication

Android有没有办法使用特定端口连接到蓝牙设备而不是使用服务UUID? 我知道这个选项可以在其他提供蓝牙支持的平台上使用(例如,Java ME通过指定“btspp://”样式URL)。

谢谢!

3 个答案:

答案 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. 因为我们正在使用Invoke,第一个参数是我们调用方法的对象,invoke的第二个参数实际上是第一个函数参数)
  2. 还有一个安全版本('createRfcommSocket'),它接受蓝牙通道号作为单个参数(同样,因为这是调用样式,你需要传递对象来调用方法,如在-1-)中提到
  3. 我发现似乎是a link to these functions' prototypes
  4. 祝所有人好运。

答案 1 :(得分:0)

蓝牙Android连接仅通过UUID完成。每个蓝牙设备都为其运行的每项服务都有一个UUID(参见蓝牙SDP)。

你只需给Android注意UUID,在客户端模式下,它会找到一个自动连接的套接字(包括端口)。在服务器模式下,它将等待指定的设备使用指定的UUID启动连接。 建立连接时,BluetoothSocket对象也有效(使用getInput / Output Stream) 请参阅Server Socket documentationClient 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

开始
  
      
  1. 在主屏幕中,打开应用程序抽屉,然后打开“设置”。
  2.   
  3. 选择“系统”。 (在某些型号上略过这一步)
  4.   
  5. 向下滚动到底部,然后点按“关于手机”,“关于设备”或“关于平板电脑”。
  6.   
  7. 向下滚动到底部,然后点按“状态”。
  8.   
  9. 向下滚动,“蓝牙地址”将显示在列表中。
  10.   

如何查找端口号? 我还没有找到应该使用的端口...... 我使用5并且它有效,但我需要研究为什么如果我想要更换手机,我需要知道是否还需要更换端口。