蓝牙概览

Android 平台包含对蓝牙网络协议栈的支持,这允许设备与其他蓝牙设备进行无线数据交换。应用框架通过蓝牙 API 提供对蓝牙功能的访问。这些 API 允许应用连接到其他蓝牙设备,从而实现点对点和多点无线功能。

使用蓝牙 API,应用可以执行以下操作

  • 扫描其他蓝牙设备。
  • 查询本地蓝牙适配器以获取配对的蓝牙设备。
  • 建立 RFCOMM 通道。
  • 通过服务发现连接到其他设备。
  • 向其他设备传输数据以及从其他设备接收数据。
  • 管理多个连接。

本主题重点介绍经典蓝牙。经典蓝牙是更耗电的操作(包括设备之间的流式传输和通信)的正确选择。对于功耗低的蓝牙设备,请考虑使用蓝牙低功耗连接。

本文档描述了不同的蓝牙配置文件,并解释了如何使用蓝牙 API 来完成使用蓝牙进行通信所需的四项主要任务

  • 设置蓝牙。
  • 查找已配对或在本地区域可用的设备。
  • 连接设备。
  • 在设备之间传输数据。

有关使用蓝牙 API 的演示,请参阅蓝牙聊天示例应用

基础知识

为了使支持蓝牙的设备能够相互传输数据,它们必须首先使用配对过程形成通信通道。一个设备(可发现设备)使自己可用于传入的连接请求。另一个设备使用服务发现过程查找可发现设备。在可发现设备接受配对请求后,这两个设备完成一个绑定过程,在该过程中它们交换安全密钥。设备会缓存这些密钥以供以后使用。配对和绑定过程完成后,这两个设备交换信息。会话完成后,发起配对请求的设备会释放已将其链接到可发现设备的通道。但是,这两个设备仍然保持绑定状态,因此只要它们彼此在范围内并且任何一个设备都没有删除绑定,它们就可以在将来的会话期间自动重新连接。

使用蓝牙 API 需要在清单文件中声明多个权限。您的应用获得使用蓝牙的权限后,需要访问BluetoothAdapter确定设备上是否可用蓝牙。如果蓝牙可用,则建立连接需要三个步骤

某些设备使用特定的蓝牙配置文件来声明其提供的数据。

关键类和接口

所有蓝牙 API 都在android.bluetooth包中提供。以下是创建蓝牙连接所需的类和接口

BluetoothAdapter
表示本地蓝牙适配器(蓝牙无线电)。BluetoothAdapter 是所有蓝牙交互的入口点。使用它,您可以发现其他蓝牙设备,查询已绑定(配对)设备的列表,使用已知的 MAC 地址实例化 BluetoothDevice,以及创建一个 BluetoothServerSocket 以监听来自其他设备的通信。
BluetoothDevice
表示远程蓝牙设备。使用它可以通过 BluetoothSocket 请求与远程设备建立连接,或查询有关设备的信息,例如其名称、地址、类别和绑定状态。
BluetoothSocket
表示蓝牙套接字的接口(类似于 TCP Socket)。这是连接点,允许应用程序使用 InputStreamOutputStream 与另一个蓝牙设备交换数据。
BluetoothServerSocket
表示一个开放的服务器套接字,用于监听传入请求(类似于 TCP ServerSocket)。为了连接两个设备,一个设备必须使用此类打开一个服务器套接字。当远程蓝牙设备对此设备发出连接请求时,该设备会接受连接,然后返回一个已连接的 BluetoothSocket
BluetoothClass
描述蓝牙设备的一般特征和功能。这是一组只读属性,定义了设备的类别和服务。虽然此信息提供了有关设备类型的有用提示,但此类的属性并不一定描述设备支持的所有蓝牙配置文件和服务。
BluetoothProfile
表示蓝牙配置文件的接口。蓝牙配置文件是基于蓝牙的设备之间无线接口规范。例如,免提配置文件。有关配置文件的更多讨论,请参阅 蓝牙配置文件
BluetoothHeadset
提供对蓝牙耳机与手机配合使用的支持。这包括蓝牙耳机配置文件和免提(v1.5)配置文件。
BluetoothA2dp
定义了如何使用高级音频分布配置文件 (A2DP) 通过蓝牙连接将高质量音频从一个设备流式传输到另一个设备。
BluetoothHealth
表示控制蓝牙服务的健康设备配置文件代理。
BluetoothHealthCallback
一个抽象类,用于实现 BluetoothHealth 回调。您必须扩展此类并实现回调方法以接收有关应用程序注册状态和蓝牙通道状态更改的更新。
BluetoothHealthAppConfiguration
表示蓝牙健康第三方应用程序注册以与远程蓝牙健康设备通信的应用程序配置。
BluetoothProfile.ServiceListener
一个接口,当蓝牙配置文件进程间通信 (IPC) 客户端已连接到或断开连接到运行特定配置文件的内部服务时,通知它们。