Java 通过蓝牙将数据从手机发送到笔记本电脑

Java 通过蓝牙将数据从手机发送到笔记本电脑,java,android,bluetooth,rfcomm,Java,Android,Bluetooth,Rfcomm,我已经成功地将我的Android(6.0.1)手机(Sony Xperia Z3)与我的笔记本电脑(运行Ubuntu 14.04)配对。我可以来回发送文件。Bluetooth connection(蓝牙连接)菜单显示,如果发送文件,连接开关将切换为ON(打开) 我使用以下方法建立了持久连接: sudo rfcomm connect rfcomm0 [MAC ADDRESS] [CHANNEL] 我想通过蓝牙将数据从手机发送到笔记本电脑。如果我运行此操作,开关也会打开,但会立即关闭连接(开关返回

我已经成功地将我的Android(6.0.1)手机(Sony Xperia Z3)与我的笔记本电脑(运行Ubuntu 14.04)配对。我可以来回发送文件。Bluetooth connection(蓝牙连接)菜单显示,如果发送文件,连接开关将切换为ON(打开)

我使用以下方法建立了持久连接:

sudo rfcomm connect rfcomm0 [MAC ADDRESS] [CHANNEL]
我想通过蓝牙将数据从手机发送到笔记本电脑。如果我运行此操作,开关也会打开,但会立即关闭连接(开关返回到关闭)

调用
init()
后,Logcat显示以下警告:

W/BluetoothAdapter:getBluetoothService()调用时没有 BluetoothManagerCallback

调用
write()
方法时,此异常:

E/error:error init:java.io.IOException:read失败,套接字可能 关闭或超时,读取ret:-1

使用
rfcomm
进行连接时,某些通道出现故障并拒绝连接。我猜我用错了频道

  • 调用
    rfcomm
    时,如何知道使用哪个频道
  • 如何在Android应用程序中指定此频道
  • 我如何知道要使用哪个UUID
  • 在示例代码中,使用了第一个UUID:为什么

不知何故,我无法使用方法
createrFComSocketToServiceRecord
使其工作

我当时所做的是删除:

ParcelUuid[] uuids = device.getUuids();
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuids[0].getUuid());
并将这些行替换为:

int channel = 1; // substitute with channel you are listening on
Method m = device.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
BluetoothSocket socket = (BluetoothSocket) m.invoke(device, channel);
然后我发布了
sudo rfcomm listen rfcomm0
,它显示了它在Linux终端上监听的频道,我终于可以连接了

回答我自己的问题:

  • 呼叫rfcomm时如何知道使用哪个频道?
    Linux终端在发出
    sudo rfcomm listen rfcomm0

  • 如何在Android应用程序中指定此频道?
    我正在使用反射访问的方法现在有这个参数(
    createRfcommSocket

  • 我如何知道要使用哪个UUID?
    在这个解决方案中没有

  • 在示例代码中使用了第一个UUID:为什么?
    对于找到的解决方案来说并不重要


嘿。。。一直以来,我都是通过USB把手机插进去//没有任何帮助。。。