Java 在PC上运行的Bluez应用程序,用于监听Android设备

Java 在PC上运行的Bluez应用程序,用于监听Android设备,java,android,bluetooth,rfcomm,bluez,Java,Android,Bluetooth,Rfcomm,Bluez,我想开发一个应用程序,使用Linux Bluetooth API Bluez,即允许Android设备发送和接收数据 对于PC端,我已经查看了以下代码: 因为Android使用RFCOMM协议,或者我猜因为无法手动设置协议 由于在Android中只能使用Java API(Bluez API锁定)和SDP,因此无法很好地工作,因此我必须使用以下调用: InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false); 例如,当我

我想开发一个应用程序,使用Linux Bluetooth API Bluez,即允许Android设备发送和接收数据

对于PC端,我已经查看了以下代码: 因为Android使用RFCOMM协议,或者我猜因为无法手动设置协议

由于在Android中只能使用Java API(Bluez API锁定)和SDP,因此无法很好地工作,因此我必须使用以下调用:

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false);
例如,当我将通道设置为0xC(12)时,这是命令返回的通道之一:

sdptool browse local | grep Channel
android应用程序可以正确连接到PC

问题是,我无法找出允许两个应用程序通信的参数。对于PC端,我只有一个值为1的端口号。在Android端,我有一个频道,分配给SDP提供的服务。但是SDP在Android中不起作用,那么我怎么能做到呢


感谢您的帮助。谢谢

我知道这不能回答你的问题,我想蓝湾(http://bluecove.org/)这是更好的选择。它支持大多数操作系统,并为Java提供了合适的库


我认为bluez不适用于Windows,您需要WIDCOMM或BlueSoleil堆栈,bluecove将为您使用合适的堆栈。

我知道这并不能回答您的问题,我认为bluecove(http://bluecove.org/)这是更好的选择。它支持大多数操作系统,并为Java提供了合适的库


我认为bluez不适用于Windows,您需要一个WIDCOMM或BlueSoleil堆栈,bluecove将为您使用合适的堆栈。

我用这种方式解决了:

用于使用SDP记录的PC端。我们必须将服务记录到一个众所周知的频道,该频道必须是免费的,我的意思是不被其他服务使用。要检查它,请执行以下命令:

sdptool record local
执行此操作的代码位于

节示例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设备直接连接到channel one,因为不幸的是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。

用于使用SDP记录的PC端。我们必须将服务记录到一个众所周知的频道,该频道必须是免费的,我的意思是不被其他服务使用。要检查它,请执行以下命令:

sdptool record local
执行此操作的代码位于

节示例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设备直接连接到channel one,因为不幸的是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。

谢谢!我考虑到了这一点。但我更喜欢使用C/C++本机库,因为它更轻量级(但也更难使用),而且应用程序GUI基于Qt框架。谢谢!我考虑到了这一点。但我更喜欢使用C/C++本机库,因为它更轻量级(但也更难使用),并且应用程序GUI基于Qt框架。