android蓝牙实现基础知识

标签 android bluetooth

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

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

最佳答案

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

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

  • 设备A
  • 设备B

  • 并假设设备A向设备B发送数据,您没有说设备B是否也在向设备A发送数据,因此,我仅介绍当设备A向设备B发送数据时的第一种情况。

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

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

  • 这样他们俩都可以交换数据。

    另一件事..如果您曾经编程过一个常规的客户端服务器,您会注意到BluetoothSocket方法一直处于阻塞状态,直到有一个客户端连接到服务器为止。蓝牙客户端-服务器应用程序也是如此。

    总结:
  • 一台设备将充当服务器-因此,您需要编写一个服务器项目并安装
    它在第一个设备上
  • 第二个设备将充当客户端-因此,您需要编写一个客户端项目,然后
    将其安装在第二个设备上
  • 不要忘记在 list 文件中为两者添加蓝牙权限
    项目。
  • 这两个项目都需要与您在问题中提到的UUID相同。
    简而言之,双方都需要UUID,以便他们各自知道自己是谁
    交流
    我认为它更像是常规客户端服务器中的端口。
    我读了一些用于RFC通讯的地方..您可能知道
    蓝牙的一些协议(protocol),例如RFC,SDP等。

  • 编辑:
    在大多数手机中,当您要通过以下方式发送数据时,会有一个配对过程
    蓝牙。因此,如果您不想使用客户端-服务器版本,我认为您可以
    做这个:
  • 您的应用程序将搜索要连接的设备。 (配对过程)
  • 配对后,您已连接到另一台设备,仅发送数据

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

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

    现在,看..

    连接建立通信后,服务器监听来自客户端的连接
    开始。
  • 客户要求数据
  • 服务器处理客户端请求并向其发送相关数据

    因此,任何数据如:文件,数据库都应存储在服务器端。

    现在,就您而言,要发送的文件位于设备A中,而不位于设备B中,
    因此,如果设备A是服务器,则他将监听连接..当设备B连接到服务器时
    (设备A)开始通信。设备B可以从设备A请求文件。
    另外,由于设备A是服务器,因此他甚至可以广播消息。
    对于与他有联系的所有客户。

    但是,您要做的就是即使设备b并没有要求也发送文件,对吗?
    我不知道您是否希望设备B还将文件发送到设备A,所以让我们划分一下
    进入场景:
  • 只是将设备A发送给B:
    在这种情况下,由于文件位于设备A中,因此意味着设备A拥有数据,
    设备A是服务器,设备B是客户端。
    因此,建立连接后,您可以从A发送到B。
  • 两个设备交换数据:
    在这种情况下,两个设备都应该互相倾听,但是其中一个应该采取行动
    作为服务器,另一个作为客户端。意味着您需要在以下位置安装serverApp
    其中一个,另一个是clientApp。
    但是他们每个人都可以发送和收听彼此的声音。因此,对于每个人,您都需要创建
    处理发送数据的线程和处理接收数据的另一个线程
  • 关于android蓝牙实现基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372375/

    相关文章:

    ios - 是否可以让iBeacon应用程序在没有GPS的情况下正常工作?

    python - Mac OS 上的 pybluez 安装错误

    java - android应用程序的内存分配问题

    android - 从安卓设备到服务器的实时视频流

    Android:如何让自定义 View 部分重绘?

    java - 如何在另一个类中设置按钮属性和操作,并在 android 的 Activity 类中使​​用它们

    android - 通过 adb 命令启用蓝牙 HCI 监听日志

    java - 当我使用 onNewIntent 时发生 java.lang.NullPointerException 的错误

    android - 发送数据到蓝牙打印机

    android - 选择 DatePickerDialog 时对话框 onCreateDialog 显示错误