Android 平台包含对蓝牙网络协议栈的支持,这允许设备与其他蓝牙设备进行无线数据交换。应用框架通过蓝牙 API 提供对蓝牙功能的访问。这些 API 允许应用连接到其他蓝牙设备,从而实现点对点和多点无线功能。
使用蓝牙 API,应用可以执行以下操作
- 扫描其他蓝牙设备。
- 查询本地蓝牙适配器以获取已配对的蓝牙设备。
- 建立 RFCOMM 通道。
- 通过服务发现连接到其他设备。
- 向其他设备传输数据以及从其他设备接收数据。
- 管理多个连接。
本主题重点介绍经典蓝牙。经典蓝牙是更耗电的操作(包括设备之间的流式传输和通信)的正确选择。对于功耗要求较低的蓝牙设备,请考虑使用蓝牙低功耗连接。
本文档描述了不同的蓝牙配置文件,并说明了如何使用蓝牙 API 来完成使用蓝牙进行通信所需的四项主要任务
- 设置蓝牙。
- 查找已配对或本地区域中可用的设备。
- 连接设备。
- 在设备之间传输数据。
有关使用蓝牙 API 的演示,请参阅蓝牙聊天示例应用。
基础知识
为了使支持蓝牙的设备能够相互传输数据,它们必须首先使用配对过程形成通信通道。一个设备(可发现设备)使其自身可用于接收传入的连接请求。另一个设备使用服务发现过程查找可发现设备。在可发现设备接受配对请求后,这两个设备完成绑定过程,在此过程中它们交换安全密钥。设备将这些密钥缓存以供以后使用。配对和绑定过程完成后,这两个设备交换信息。会话完成后,发起配对请求的设备释放已将其链接到可发现设备的通道。但是,这两个设备仍然保持绑定状态,因此只要它们彼此在范围内并且任何一个设备都没有删除绑定,它们就可以在将来的会话期间自动重新连接。
使用蓝牙 API 需要在清单文件中声明一些权限。您的应用获得使用蓝牙的权限后,需要访问BluetoothAdapter
并确定设备上是否可用蓝牙。如果蓝牙可用,则可以通过三个步骤建立连接
- 查找附近的蓝牙设备,无论是已配对的设备还是新的设备。
- 连接到蓝牙设备.
- 与已连接的设备传输数据 .
某些设备使用特定的蓝牙配置文件来声明其提供的数据。
关键类和接口
所有蓝牙 API 都位于android.bluetooth
包中。以下是创建蓝牙连接所需的类和接口
BluetoothAdapter
- 表示本地蓝牙适配器(蓝牙无线电)。
BluetoothAdapter
是所有蓝牙交互的入口点。使用它,您可以发现其他蓝牙设备,查询已绑定(配对)设备列表,使用已知的 MAC 地址实例化BluetoothDevice
,以及创建BluetoothServerSocket
以侦听来自其他设备的通信。 BluetoothDevice
- 表示远程蓝牙设备。使用它通过
BluetoothSocket
请求与远程设备连接,或查询有关设备的信息,例如其名称、地址、类别和绑定状态。 BluetoothSocket
- 表示蓝牙套接字的接口(类似于 TCP
Socket
)。这是连接点,允许应用程序使用InputStream
和OutputStream
与另一个蓝牙设备交换数据。 BluetoothServerSocket
- 表示一个开放的服务器套接字,用于侦听传入请求(类似于 TCP
ServerSocket
)。为了连接两个设备,一个设备必须使用此类打开服务器套接字。当远程蓝牙设备对此设备发出连接请求时,该设备会接受连接,然后返回一个已连接的BluetoothSocket
。 BluetoothClass
- 描述蓝牙设备的一般特性和功能。这是一组只读属性,定义了设备的类别和服务。尽管此信息提供了有关设备类型的有用提示,但此类的属性并不一定描述设备支持的所有蓝牙配置文件和服务。
BluetoothProfile
- 表示蓝牙配置文件的接口。蓝牙配置文件是用于设备之间基于蓝牙通信的无线接口规范。例如,免提配置文件。有关配置文件的更多讨论,请参阅蓝牙配置文件。
BluetoothHeadset
- 提供对蓝牙耳机与移动电话一起使用的支持。这包括蓝牙耳机配置文件和免提(v1.5)配置文件。
BluetoothA2dp
- 定义了如何使用高级音频分配配置文件 (A2DP) 通过蓝牙连接将高质量音频从一个设备流式传输到另一个设备。
BluetoothHealth
- 表示控制蓝牙服务的健康设备配置文件代理。
BluetoothHealthCallback
- 一个抽象类,用于实现
BluetoothHealth
回调。您必须扩展此类并实现回调方法以接收有关应用程序注册状态和蓝牙通道状态更改的更新。 BluetoothHealthAppConfiguration
- 表示蓝牙健康第三方应用程序注册以与远程蓝牙健康设备通信的应用程序配置。
BluetoothProfile.ServiceListener
- 一个接口,当它们已连接到或断开连接到运行特定配置文件的内部服务时,通知
BluetoothProfile
进程间通信 (IPC) 客户端。