蓝牙开发流程总结
1. 开启蓝牙
2. 扫描蓝牙,并将这些设备加入到devices列表
3. 配对蓝牙,将次设备加入到已配对设备列表
4. 连接蓝牙
5. 通信
蓝牙总体流程图:
按层次划分
蓝牙权限声明
蓝牙的使用有三个权限:
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 客户端连接到服务(即,运行特定配置文件的内部服务)或断开服务连接时向其发送通知的接口。