【问题标题】:Android Bluetooth Chat sample app - multiple connectionsAndroid 蓝牙聊天示例应用 - 多个连接
【发布时间】:2012-06-13 09:13:59
【问题描述】:

是否可以将 Android 蓝牙聊天示例应用设置为一次连接多个人,并拥有一个迷你聊天室?这意味着什么?

【问题讨论】:

    标签: android bluetooth sample rfcomm


    【解决方案1】:

    tl;dr 版本:蓝牙很烂,不要使用它,改用 wifi,可能由网络后端支持。

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

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

    该项目的目标是支持多人在后台静默交互,但这从未实现,相反,我们放弃了蓝牙,转而使用 wifi,这很多效果更好。概括地说,我认为人们将蓝牙视为可靠的点对点通信的一种可能媒介,但它并没有真正设计成那样:它更多地是用于小型设备(想想耳机)之间的短距离通信的媒介。

    请注意,如果您想这样做,您可以连接的最大设备数量是固定的,因为根据蓝牙规范,一个微微网最多支持七个设备。 (See the wikipedia article.)

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

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

    我记得发布了一篇更详细的文章,详细说明了如何执行此操作(使用代码),如果我能找到它,我也可能会挖掘出来。应该是 2010 年底或 2011 年初。

    所以答案是,抽象地说,是的,您可以尝试通过使用多个 UUID 来做到这一点(使用一个之后,就是这样,您必须使用一些分配尝试另一个协议)。然而,在实践中,经过大量试验和错误,这对于您可能想要使用它的用途实际上并不适用,而使用 Internet 后端会更好很多。顺便说一句,这也有另一个好处,大多数用户不太喜欢打开蓝牙,因为担心电池电量耗尽..

    【讨论】:

    • 我想做一个蓝牙聊天应用,用户的设备会广播信号寻找其他设备。在 API 级别上,每个设备都会知道使用我的应用程序的其他设备是否可以聊天。然后用户可以选择任何其他设备(其他人)进行聊天并完成连接设置。或者如果被其他人拒绝,连接用户将被告知。可以这样做吗?谢谢
    【解决方案2】:

    把这个留在这里,以防它帮助别人。

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

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

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

    服务器和客户端线程都管理相同的连接。我创建了单独的线程来接受消息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 秒以尝试作为客户端连接。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-14
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多