6

任何人都可以用简单的话解释我在android蓝牙示例中需要UUID。我已经阅读了一些关于它的文章,但仍然不清楚 UUID 的确切需求。现在让我向您解释一下我想要开发的场景:我想开发一个 android 应用程序来通过蓝牙将数据从我的手机传输到另一部手机,例如“扩展名为 .xyz 的文件”。接收电话完全不需要我正在使用的应用程序。我只想将数据从我的应用程序传输到其他手机,仅此而已。我不在乎接收者对数据做了什么。我只想连接到范围内的设备并使用我的应用程序传输该文件现在我应该怎么做?UUID 的作用从何而来?我读过 UUID 是针对我的应用程序的,并且服务器和接收者都应该知道这个 UUID 以形成连接。但是如果接收方没有我的应用程序怎么办?它肯定不知道我的 Applications UUID 吗?那么如何进行数据传输呢?我只是想使用蓝牙而不涉及特定的应用程序。在这里,我的应用程序应该做什么?它应该创建服务器套接字/客户端套接字还是什么?以及为什么。

用简单的话解释一下(如果可能的话,一些文章)。我不希望有 BluetoothChat 建议的常规答案。如果您不明白这个问题,请告诉我,我会尝试更具体并为您详细说明。这个问题的基本目标是澄清 UUID 的使用以及使用蓝牙从运行在一个 Android 手机上的应用程序在两个设备(而不是应用程序)之间传输数据。

4

2 回答 2

5

即使使用蓝牙,您也可以创建客户端-服务器应用程序。这里有一个BluetoothSocket 阅读http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html

现在,假设您有两个设备:

  1. 设备 A
  2. 设备 B

并假设设备A向设备B发送数据,您没有说设备B是否也在向设备A发送数据,所以我将描述A发送给B的第一种情况。

因此,在这种情况下,由于所有数据都存储在设备 A 中,并且您希望将其发送到设备 B,因此将设备 A 创建为 BluetoothServer 并将设备 B 创建为侦听服务器的 BluetoothClient 会更合理。

但是..如果您希望两个设备都交换数据..您可以将其中一个作为服务器,并为每个设备创建 2 个线程:

  1. 发送数据的线程
  2. 监听数据的线程

所以他们两个可以交换数据..

另一件事..如果您曾经编写过常规客户端服务器,您会注意到该accept()方法会阻塞,直到有客户端连接到服务器..蓝牙客户端-服务器应用程序也是如此。

总结:

  1. 一个设备将充当服务器 - 因此您需要编写一个服务器项目并将
    其安装在第一台设备上

  2. 第二台设备将充当客户端 - 因此您需要编写一个客户端项目并将其安装在第二台设备上

  3. 不要忘记在两个
    项目的清单文件中添加蓝牙权限。

  4. 这两个项目都需要与您在问题中提到的相同的 UUID。简而言之,双方都需要 UUID,因此他们每个人都知道与谁通信我认为它更像是常规客户端服务器中的端口。我在某处读到了用于 RFC 通信的地方。你可能知道有
    一些蓝牙协议,如 RFC、SDP 等。

编辑: 在大多数手机中,当您想通过蓝牙发送数据时,都有一个配对过程。因此,如果您不想使用客户端服务器版本,我认为您可以这样做:

  1. 您的应用程序将搜索要连接的设备。(配对过程)
  2. 配对后,您已连接到另一台设备并发送数据

编辑 2: 您想将数据从 A 发送到 B 对吗?我会解释得更清楚..

当您说客户端应该知道谁是服务器并且需要插入服务器的端口和IP时,您是对的,这是正确的并且以这种方式工作。

现在,看..

服务器侦听来自客户端的连接,当连接建立时,通信开始。

  1. 客户要求数据
  2. 服务器处理客户端请求并将相关数据发送给他

    所以任何数据,如:文件、数据库都应该存储在服务器端。

    现在在您的情况下,您要发送的文件位于设备 A 而不是设备 B,因此,如果设备 A 是服务器,他将侦听连接..当设备 B 连接到服务器(设备 A)时,通信开始.. 设备 B 可以向设备 A 请求文件。此外,由于设备 A 是服务器,他甚至可以广播消息.. 意味着向连接到他的所有客户端发送相同的消息。

    但是你想要做的是发送文件,即使设备 b 没有要求它,对吧?我不明白您是否希望设备 B 也将文件发送到设备 A,所以让我们将其划分
    为场景:

  3. 只是设备A发送给B:在这种情况下,由于文件位于设备A,意味着设备A有数据,设备A是服务器,设备B是客户端。因此,当建立连接时,您可以从 A 发送到 B。

  4. 两台设备都交换数据:在这种情况下,两台设备都应该互相监听,但只有一个应该充当服务器,另一个充当客户端。意味着您需要在其中一个上安装 serverApp,在另一个上安装 clientApp。但是他们每个人都可以发送和收听其他人。所以对于每个你需要创建处理发送数据的线程和另一个处理接收数据的线程

于 2013-05-04T09:27:50.053 回答
1

UUID 是通用唯一标识符。当您想连接到蓝牙公开的任何服务时,您应该有 UUID 告诉蓝牙软件模块它必须启动与此特定服务的连接。在您的情况下,为了将文件从 DevA 发送到 DevB,它必须使用文件传输配置文件,并且有一个与此相关的特定 uuid,这是由蓝牙 SIG 定义的,它是认证蓝牙产品并致力于该技术的权威机构。所有使用蓝牙的设备都知道这一点。

当 DevB 接收到带有唯一 uuid 的传入连接请求时,Tu 简而言之,它会知道设备正在尝试连接到 DevB 的哪个特定服务并连接到该服务。因此,如果您想将文件从 DevA 发送到 DevB,那么您不需要在 DevB 拥有相同的应用程序。但是您需要确保使用蓝牙 SIG 为文件传输配置文件指定的 UUID。

问候, 施里帕蒂

于 2013-10-30T12:52:42.963 回答