Android:如何使用蓝牙向多个设备发送消息?

时间:2012-04-06 04:04:41

标签: android bluetooth

我使用以下代码将文本文件发送到多个设备

ContentValues values = new ContentValues(); 
String filePath1   =Environment.getExternalStorageDirectory().toString()+"/filename.txt";
values.put(BluetoothShare.URI, Uri.fromFile(newFile(filePath1)).toString()); 
values.put(BluetoothShare.DESTINATION,itDevices.getAddress());               values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND); 
Long ts = System.currentTimeMillis(); 
values.put(BluetoothShare.TIMESTAMP, ts); 
Uri contentUri = getContentResolver().insert(BluetoothShare.CONTENT_URI, values);

我想要相同类型的代码来发送消息。通过使用蓝牙API应用程序,当我尝试将消息发送到多个设备时,我首先连接到设备并向该设备发送消息,然后断开连接并连接到另一个设备并以这种方式将消息发送到另一个设备。

是否可以逐个向多个设备发送消息而不断开通信?

2 个答案:

答案 0 :(得分:4)

是的,我相信可以同时与多个Android Bluetoooth设备交换消息 - 无需断开连接和重新连接。

将Linux API留给初学者,蓝牙绝对允许您同时连接并与多个设备通信。所有蓝牙连接都发生在微微网中,包括主设备和最多7个从设备。设备可以是超过一个微微网的一部分,但这是低效的(两个微微网的时间不协调)并且可能不可靠,所以如果你想连接到多个其他设备,你必须确保你是主设备。

我已经使用BlueZ(大多数Linux和Android设备上的蓝牙堆栈,包括AOSP)完成了这类工作,因此我可以验证它是相当直接且可靠的。

但是,我在Android上只做了一对一的连接,所以我不能肯定地说你如何控制那里的主从分配。与常规Linux相比,Android提供的功能和控制要少得多,并且它无法直接读取或更改主从角色分配。

理论上,您应该能够根据规则来控制角色,这些规则始终会启动连接将成为主服务器,但我希望进行一些测试以查看其他可能发生的情况。我担心的主要原因是其中一个客户端设备(您希望是从属设备)可能已经连接到例如耳机或键盘,所以当它收到传入的连接请求时,它可能会请求切换到主角色,这样它就可以将你的服务器添加到它的微微网。

我建议的是,在您进行测试时,可以在您的某个设备上访问hcitool(例如Linux机器或root用户)并执行'hcitool con',它会为您提供一个列表当前的连接,我认为这包括角色。 (hcitool是Linux上的标准工具,包含在AOSP中。)我想你也可以使用经验方法:如果你能够创建一堆可靠的工作连接,那么它的工作原理并不重要 - 只需确保测试某些设备与其他设备之间存在连接的情况。

很抱歉继续,但我认为这是一个很好的问题,并且有兴趣听到在Android上完成此操作的人。我想我已经听说过Android的多人蓝牙游戏 - 我想知道这些游戏能否可靠运行。

答案 1 :(得分:1)

简单答案,如果不断开与当前设备的连接,则无法发送到多个设备。蓝牙API使用一对一连接,该连接本身是同步的。因此,您无法使用蓝牙API实现多次发送。