蓝牙开发流程总结

934 阅读5分钟

蓝牙开发流程总结

1. 开启蓝牙

2. 扫描蓝牙,并将这些设备加入到devices列表

3. 配对蓝牙,将次设备加入到已配对设备列表

4. 连接蓝牙

5. 通信

蓝牙总体流程图:

图片.png

按层次划分

图片.png

蓝牙权限声明

蓝牙的使用有三个权限:

1) BLUETOOTH:需要此权限才能执行任何蓝牙通信,例如请求连接、接受连接和传输数据。

2) ACCESS_FINE_LOCATION:蓝牙扫描可用于收集用户的位置信息。此类信息可能来自用户自己的设备,以及在商店和交通设施等位置使用的蓝牙信标。

3) BLUETOOTH_ADMIN:这个权限不是必须,但是如果您想让应用启动设备发现或操纵蓝牙设置,需要使用这个权限。

蓝牙管理

1.检测设备是否支持蓝牙

2.启用蓝牙

3.监听蓝牙状态变化

蓝牙四种状态:

STATE_TURNING_ON 正在打开

STATE_ON 打开

STATE_TURNING_OFF 正在关闭

STATE_OFF 关闭

每当蓝牙状态发生变化时,系统都会广播此 Intent。此广播包含额外字段 EXTRA_STATE 和 EXTRA_PREVIOUS_STATE,二者分别表示新的和旧的蓝牙状态。其值为上面4中状态中的一种

设备发现

· 发现别的设备

· 监听发现的设备

· 能够被别的设备发现

· 监听被识别状态改变

查询配对设备

在执行设备发现之前,您必须查询已配对的设备集,以了解所需的设备是否处于已检测到状态。为此,请调用 getBondedDevices()。此方法会返回一组表示已配对设备的 BluetoothDevice 对象。BluetoothDevice包含了蓝牙连接的相关信息。

Set pairedDevices =bluetoothAdapter.getBondedDevices();

蓝牙设备发现

  • startDiscovery()//开始设备查找

  • cancelDiscovery()//取消设备查找

  • isDiscovering()//是否正在执行设备发现

处理发现的设备

要接收处理设备发现信息,必须注册一个 action为BluetoothDevice.ACTION_FOUND的广播。系统会为每台设备广播此 Intent。Intent 包含额外字段 EXTRA_DEVICE 和 EXTRA_CLASS,二者又分别包含 BluetoothDevice 和 BluetoothClass。BluetoothDevice包含蓝牙连接的相关信息,BluetoothClass可以查看当前设备支持的协议。

蓝牙设备的可检测性

若要将本地设备设为可被其他设备检测到,可使用 ACTION_REQUEST_DISCOVERABLE Intent 调用 startActivityForResult(Intent, int)。这样便可发出启用系统可检测到模式的请求,从而无需导航至设置应用。

监听设备的可检测性

设备将在分配的时间内以静默方式保持可检测到模式。如果要在可检测到模式发生变化时收到通知,则可以为 ACTION_SCAN_MODE_CHANGED Intent 注册 BroadcastReceiver。此 Intent 将包含额外字段 EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE,二者分别提供新的和旧的扫描模式

(注意:如果尚未在设备上启用蓝牙,则启用设备可检测性会自动启用蓝牙

蓝牙连接

蓝牙的连接会涉及到 两个关键类BluetoothServerSocket 、BluetoothSocket 。BluetoothServerSocket作为服务端来监听客户端的连接请求,BluetoothSocket用于已经建立的连接发送数据。

蓝牙的java类:

  • BluetoothDevicePreference:主要提供获取蓝牙设备及通知蓝牙设备配置信息变化,比如是否发现、配对、连接

  • BluetoothAdapter:本地蓝牙适配器(蓝牙无线装置,是所有蓝牙交互的入口点。发现其他蓝牙设备,查询绑定(配对)设备的列表,使用已知的 MAC 地址实例化BluetoothDevice;创建 BluetoothServerSocket 以侦听来自其他设备的通信。

  • BluetoothDevice:表远程蓝牙设备。利用它可以通过 BluetoothSocket 请求与某个远程设备建立连接,或查询有关该设备的信息,例如设备的名称、地址、类和绑定状态等。

  • BluetoothSocket:表示蓝牙套接字接口(与 TCP Socket 相似)。这是允许应用通过 InputStream 和 OutputStream 与其他蓝牙设备交换数据的连接点

  • BluetoothServerSocket:表示用于侦听传入请求的开放服务器套接字(类似于 TCP ServerSocket )。 要连接两台 Android 设备,其中一台设备必须使用此类开放一个服务器套接字。 当一台远程蓝牙设备向此设备发出连接请求时,BSS将会在接受连接后返回已连接的 BluetoothSocket。

  • BluetoothClass:描述蓝牙设备的一般特征和功能。这是一组只读属性,用于定义设备的主要和次要设备类及其服务。不过,它不能可靠地描述设备支持的所有蓝牙配置文件和服务,而是适合作为设备类型提示。

  • BluetoothProfile:表示蓝牙配置文件的接口。 蓝牙配置文件是适用于设备间蓝牙通信的无线接口规范。 免提配置文件便是一个示例。

  • BluetoothHeadset:提供蓝牙耳机支持,以便与手机配合使用。其中包括蓝牙耳机和免提(1.5 版)配置文件。

  • BluetoothA2dp:定义高质量音频如何通过蓝牙连接和流式传输,从一台设备传输到另一台设备。 “ A2DP”代表高级音频分发配置文件。

  • BluetoothHealth:表示用于控制蓝牙服务的健康设备配置文件代理。

  • BluetoothHealthCallback : 用于实现 BluetoothHealth 回调的抽象类。您必须扩展此类并实现回调方法,以接收关于应用注册状态和蓝牙通道状态变化的更新内容。

  • BluetoothHealthAppConfiguration : 表示第三方蓝牙健康应用注册的应用配置,以便与远程蓝牙健康设备通信。

  • BluetoothProfile.ServiceListener : 在 BluetoothProfile IPC 客户端连接到服务(即,运行特定配置文件的内部服务)或断开服务连接时向其发送通知的接口。