我想开发一个使用Linux蓝牙API Bluez的应用程序,这意味着允许Android设备发送和接收数据。
对于PC端,我查看了以下代码:http://people.csail.mit.edu/albert/bluez-intro/x502.html因为Android使用RFCOMM协议,或者我猜既然不可能手动设置协议。
由于在Android中只能使用Java API(Bluez API锁定)和SDP不能很好地工作,因此我必须使用此调用:
InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false);
例如,当我将通道设置为 0xC (12) 时,这是命令返回的通道之一:
sdptool browse local | grep Channel
安卓应用程序可以正确连接到PC。
问题是我无法弄清楚允许两个应用程序进行通信的参数是什么。在PC端,我只有一个值为1的端口号。在安卓方面,我有一个分配给SDP可用服务的频道。但是SDP在Android中不起作用,所以我该怎么做?
任何帮助,不胜感激。谢谢
我用这种方式解决了:
对于使用 SDP 记录的 PC 端。我们必须将服务记录到必须免费的知名频道,我的意思是其他服务不使用。要检查它,请执行以下命令:
sdptool record local
执行此操作的代码是 http://people.csail.mit.edu/albert/bluez-intro/x604.html
部分示例 4-9。描述服务
这两行必须在 //设置一般服务 ID 后添加
// set the service class ID
sdp_list_t service_class = {NULL, &svc_uuid};
sdp_set_service_classes( record, &service_class);
我们必须将频道更改为其他服务不使用的频道。例如通道 1 :
uint8_t rfcomm_channel = 1;
现在我们已经有了监听 PC 端的东西,我们必须通过众所周知的反射方法将 android 设备直接连接到通道一,因为不幸的是,SDP 现在在 android 中完全可以工作。
Method bluetoothConnect;
bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class} );
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1);
CommunicationChannel.connect();
当然,BlueDevice 是由 startDiscovery() 方法和"1"代表通道 1 的设备。
这不能回答你的问题,我认为蓝湾(http://bluecove.org/)会是更好的选择。它支持大多数操作系统,并为Java提供了不错的库。
我不认为bluez适用于Windows,你需要一个WIDCOMM或BlueSoleil堆栈,bluecove会为你使用适当的堆栈。