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
- 表示蓝牙 Health 第三方应用注册用于与远程蓝牙 Health 设备通信的应用配置。
BluetoothProfile.ServiceListener
- 当
BluetoothProfile
进程间通信 (IPC) 客户端连接到或断开连接到运行特定配置文件的内部服务时,该接口会通知这些客户端。