【问题标题】:Can you establish multiple Bluetooth connections between the same two devices in Android?你能在 Android 中的相同两台设备之间建立多个蓝牙连接吗?
【发布时间】:2012-11-14 23:15:05
【问题描述】:

我有两台 Android 设备。一个充当服务器,另一个充当客户端。客户端连接到服务器并请求一个文件 - 这是在客户端上的一个线程和服务器上的一个线程中完成的,这样两者都可以继续做他们想做的事情。

客户端然后尝试再次连接到服务器以请求另一个文件。现在我在尝试连接时收到java.io.IOException: Device or resource busy (socket.connect())。是因为蓝牙(在 Android 上)只允许两个设备之间的一个通道吗? (如果它是另一个设备,它会工作,但如果它是相同的,它不会?)请注意,两次尝试都是使用相同的服务名称和 UUID 进行的。

即使错误是特定于我的代码,我也想知道是否是这种情况。

系统: android 2.2.1 与 bluecove 蓝牙库通信。

【问题讨论】:

    标签: android bluetooth bluecove


    【解决方案1】:

    绝对不能使用相同的 UUID(通用唯一标识符)。

    参考来自here

    也许不止一个。您可以以 Server/Client 样式连接多台设备,您可以尝试将其中一台设备设置为服务器,并在另一台上启动多个客户端。我的第一个猜测是启动多个客户端线程,但您可能必须找到一种方法来更改每个客户端的 MAC 地址。

    Here你可以找到另一个关于如何更改你的mac地址的讨论,但只适用于root设备。对于非根目录,我找不到其他任何东西。不知道如何以编程方式执行此操作,但它可能会给您一个开始。

    Here 有一个关于在服务器中同时连接多个客户端的讨论。我从this question 到达那里。 (我想这可能是你最接近的镜头)

    Here你正在讨论点对点网络。

    【讨论】:

    • 我已经能够建立多个并行连接,方法是在当前通道上取消注册 SDP,并在当前通道由于来自设备。 UUID 是一样的。当 4-5 个并发客户端线程尝试连接时,就会出现问题。
    • 我对此一无所知。当您设法使用相同的 UUID 时,您应该能够打开 7 个客户端连接。当您收到繁忙错误时,所有线程都停止工作还是只是您的最新客户端无法加入网络?
    • 只有最新的客户端不能加入,顺便问一下7有什么特别之处吗?
    • 我不是蓝牙专家,但一个 Piconet 仅限于 7 个从站。它们有 3 位地址,所以 2^3=8 和 1 是主机。你可以在这里阅读更多内容en.wikipedia.org/wiki/Scatternet。我会摆弄蓝牙 api,看看能不能找到别的东西。
    • @CuriousSid 如何注销当前频道的SDP?
    【解决方案2】:

    AFAIK,在蓝牙连接的情况下无法进行多重连接。蓝牙是连接 API 默认情况下是同步的,因此一次只能连接一个。所以你不能执行多个连接。

    但是,也可以采用另一种方式,例如建立一个连接,对其执行 2 秒操作,然后创建另一个连接并执行 2 秒操作,就像在正常的多任务操作系统中发生的那样。

    【讨论】:

    • 那么您能否解释一下,例如,笔记本电脑如何通过蓝牙同时连接键盘、鼠标和耳机?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多