Java 通过蓝牙将数据从手机发送到笔记本电脑
我已经成功地将我的Android(6.0.1)手机(Sony Xperia Z3)与我的笔记本电脑(运行Ubuntu 14.04)配对。我可以来回发送文件。Bluetooth connection(蓝牙连接)菜单显示,如果发送文件,连接开关将切换为ON(打开) 我使用以下方法建立了持久连接: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] 我想通过蓝牙将数据从手机发送到笔记本电脑。如果我运行此操作,开关也会打开,但会立即关闭连接(开关返回
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:为什么?
对于找到的解决方案来说并不重要