gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:12 25 4
gpt4 key购买 nike

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

谢谢!

最佳答案

好的,已经有一段时间了,但我找到了解决问题的办法。我实际上打算放弃并使用 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'),它接受蓝牙 channel 号作为单个参数(同样,由于这是调用样式,您需要传递对象以调用方法,因为-1- 中提到)
  3. 我发现似乎是 a link to these functions' prototypes

祝大家好运

关于android - 使用 Android 连接到蓝牙设备上的特定蓝牙端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com