1

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

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 应用程序,当我首先尝试将消息发送到多个设备时,我连接到一个设备并将消息发送到该设备,然后再次断开连接并连接到另一个设备并以这种方式将消息发送到另一个设备。

是否可以在不断开通信的情况下将消息一一发送到多个设备?

4

2 回答 2

4

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

将 Android API 放在一边,蓝牙绝对可以让您同时连接到多个设备并与之通信。所有蓝牙连接都发生在微微网中,其中包括一个主设备和多达 7 个从设备。一个设备可以是多个微微网的一部分,但这效率低下(两个微微网的时序不协调)并且可能不可靠,因此如果您想连接到多个其他设备,您必须确保您是主设备。

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

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

从理论上讲,您应该能够根据发起连接的一方将成为主节点的规则来控制角色,但我想做一些测试以了解可能发生的其他情况。我的担心主要来自其中一个客户端设备(您希望成为从设备)可能已经连接到例如耳机或键盘的可能性,因此当它收到传入的连接请求时,它可能会请求切换到主角色因此它可以将您的服务器添加到其微微网中。

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

很抱歉继续说下去,但我认为这是一个很好的问题,并且很想听听在 Android 上做过这件事的人的意见。我想我听说过适用于 Android 的多人蓝牙游戏——我想知道这些游戏是否可靠。

于 2012-04-06T18:43:39.017 回答
1

简单的回答,如果不断开与当前设备的连接,就无法发送到多个设备。蓝牙 API 使用一对一连接,它本身是同步的。所以你不能使用蓝牙 API 实现多次发送。

于 2012-04-06T04:53:13.187 回答