Android蓝牙聊天示例应用 - 多个连接

时间:2012-06-09 18:43:45

标签: android bluetooth sample rfcomm

是否可以设置Android蓝牙聊天示例应用,以便一次连接多个人,并拥有迷你聊天室?这会带来什么?

3 个答案:

答案 0 :(得分:8)

tl;博士版:蓝牙很糟糕,不要使用它,而是使用wifi,可能是由网络后端支持。

为了社交无线网络研究项目的利益,我多年来彻底调查了这个问题。我的一般建议是:它不适用于超过两个/三个人。蓝牙的设计并非考虑到无线对等网络。

一般来说,Android设备(特别是 HTC的设备,iirc)中包含的廉价蓝牙控制器似乎并不能真正处理超过两个或三个连接。我不确定这是硬件还是固件问题,但我可以讲述一些基本的轶事。我正在努力在2011年初在SDK级别(即没有固件修改)实现这个想法,并且能够让对等方获得两个额外的连接(即,三个设备,每个连接到另外两个)到在连接突然死亡之前工作几分钟到一个小时,插座将变得无法使用,需要重新连接。不幸的是,20分钟是一个上限,通常不可能完全连接到一个其他设备。

该项目的目标是支持多个人在后台默默地互相交流,但这从未实现过,相反,我们放弃了蓝牙,转而使用wifi,其效果更好 。在摘要中,我认为人们将蓝牙视为可靠的对等通信的可能媒介,但实际上并没有这样设计:它更像是用于小型设备之间短距离通信的媒介(想想耳机)。

请注意,如果要执行此操作,可以连接的最大设备数量是固定的,因为根据蓝牙规范,微微网最多支持七个设备。 (See the wikipedia article.)

所需的更改很简单:您为每个设备使用不同的 UUID。这可以通过多种方式实现,使用带外交换机制,或者以增加的方式分配UUID的简单方案,以及连接到网络时,连续尝试。

以下是一些相关的Google群组主题:

我记得发布了一篇更详细的文章,详细介绍了如何做到这一点(带代码)我也可以挖掘......如果我能找到的话。应该是从2010年底或2011年初开始。

所以答案是,在摘要中,是的,您可以尝试来执行此操作,方法是使用多个UUID(在使用之后,就是这样,你必须使用一些任务尝试另一个)协议)。然而,在实践中,经过大量的试验和错误后,这并不适用于你可能想要使用它的东西,并且它更适合用于互联网后端的很多。顺便说一句,这也是另一个原因,大多数用户并不喜欢打开他们的蓝牙,因为他们担心电池耗尽。

答案 1 :(得分:3)

离开这里,万一它可以帮助别人。

我能够在official bluetooth tutorial之后创建自定义聊天室并对其进行一些修改。 不幸的是,我无法提供大部分代码,但主要的想法是:

每台设备都充当服务器和客户端。启动聊天时,设备启动其服务器线程。服务器线程与官方线程相同,但在接受连接时不会结束。它只是继续倾听。

客户端线程与教程中的相同。

服务器和客户端线程都管理连接相同。我创建了用于接受消息following this tutorial的分离线程和用于发送消息的线程。

private void manageConnectedSocket(BluetoothSocket socket) {        
    //create thread responsible for sending messages.
    SendingThread w = new SendingThread(socket);
    MainActivity.addSendingThread(w);
    //Creates listener for messages to accept.       
    MainActivity.addListener(socket);
}    

现在主要活动总是在用户点击发送按钮时,为每个工作人员(发送线程)发送消息到远程设备。听力是异步运行的。

重要:

  1. 您需要在邮件发送失败时处理异常,并在检测到设备被删除时删除设备的发送和接收线程。就我而言,我使用了众所周知的UUID" 00001101-0000-1000-8000-00805f9b34fb"。对于每个设备。
  2. 你需要在尝试之间等待3秒才能作为客户端进行连接,因为有些设备的蓝牙硬件很弱而拒绝连接作为客户端。

答案 2 :(得分:0)

Bt连接最多支持7-10个连接。因此,您将受限于该范围。我认为它是为主要设备的扩展而设计的,而不是用于随机通信

来源:搜索"蓝牙编程"在谷歌上