gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:10:59 34 4
gpt4 key购买 nike

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

对于 PC 端,我查看了这段代码: http://people.csail.mit.edu/albert/bluez-intro/x502.html因为 Android 使用 RFCOMM 协议(protocol),或者我猜因为不可能手动设置协议(protocol)。

由于在 Android 中只能使用 Java API(Bluez API 已锁定)并且 SDP 不能很好地工作,所以我必须使用此调用:

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false);

例如,当我将 channel 设置为 0xC (12) 时,这是命令返回的 channel 之一:

sdptool browse local | grep Channel

android应用程序可以正确连接到PC。

问题是我不知道允许两个应用程序通信的参数是什么。对于 PC 端,我只有一个值为 1 的端口号。对于 Android 端,我有一个分配给 SDP 可用服务的 channel 。但是 SDP 在 Android 中不工作,我该怎么做?

感谢任何帮助。谢谢

最佳答案

我是这样解决的:

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

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);

我们必须将 channel 更改为其他服务未使用的 channel 。例如 channel 1:

uint8_t rfcomm_channel = 1;

既然我们有一些东西在 PC 端监听,我们必须通过众所周知的反射方法将 android 设备直接连接到 channel 一,因为不幸的是,SDP 现在在 android 中完全可以工作。

Method bluetoothConnect;

bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class} );
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1);

CommunicationChannel.connect();

当然BlueDevice是通过startDiscovery()方法发现的设备,“1”代表 channel 1。

关于java - 在 PC 上运行的用于监听 Android 设备的 Bluez 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872871/

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