蓝牙技术简介
蓝牙(Bluetooth)是一种无线技术标准,旨在实现固定和移动设备之间的短距离通信。它广泛应用于手机、耳机、智能家居设备等领域。Android系统作为全球最流行的移动操作系统之一,自然也支持蓝牙技术。本文将带你从基础到实战,全面了解Android蓝牙开发。
一、蓝牙基础
1. 蓝牙协议栈
蓝牙协议栈是蓝牙技术的核心,它定义了蓝牙设备之间的通信规则。一个典型的蓝牙协议栈包括以下几层:
- 物理层:负责将数据转换为无线电信号,并通过无线电波传输。
- 链路层:负责建立连接、加密和校验数据。
- 网络层:负责数据包的路由和传输。
- 传输层:负责数据的传输和流量控制。
- 应用层:负责实现具体的应用功能,如SPP、GATT等。
2. 蓝牙设备角色
在蓝牙通信中,设备分为两种角色:主设备(Master)和从设备(Slave)。主设备负责发起连接、控制连接过程,而从设备则被动响应连接请求。
3. 蓝牙连接类型
蓝牙连接主要分为三种类型:
- 点对点连接:两个设备之间的连接,如手机和耳机。
- 点对多连接:一个设备与多个设备之间的连接,如手机与多个蓝牙音箱。
- 广播连接:一个设备向周围设备发送广播信息,如蓝牙广告。
二、Android蓝牙开发环境搭建
1. 创建Android项目
首先,在Android Studio中创建一个新的Android项目。选择合适的API级别,确保你的设备或模拟器支持蓝牙功能。
2. 添加蓝牙权限
在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
3. 添加蓝牙依赖
在build.gradle文件中添加以下依赖:
implementation 'androidx.bluetooth:bluetooth:1.2.0'
三、蓝牙设备扫描与连接
1. 扫描设备
使用BluetoothAdapter获取本地蓝牙适配器,然后调用其startDiscovery()方法开始扫描附近的蓝牙设备。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.startDiscovery();
2. 处理扫描结果
在扫描结果回调中,获取扫描到的设备信息,并根据需要连接到目标设备。
bluetoothAdapter.getScanResults().forEach(device -> {
if (device.getName() != null && device.getName().equals("目标设备名称")) {
connect(device);
}
});
3. 连接设备
使用BluetoothDevice获取目标设备的实例,然后调用其connectGatt()方法连接到设备。
BluetoothDevice device = ...;
device.connectGatt(context, false, gattCallback);
四、蓝牙数据传输
1. GATT协议
GATT(Generic Attribute Profile)是蓝牙通信的核心协议之一,它定义了设备之间的数据传输方式。在Android中,使用BluetoothGatt类实现GATT协议。
2. 读写服务
在GATT协议中,服务(Service)是数据传输的基本单元。一个服务可以包含多个特征(Characteristic),特征可以包含多个属性(Property)。
BluetoothGattService service = gatt.getService(UUID.fromString("服务UUID"));
BluetoothGattCharacteristic characteristic = service.getCharacteristic(UUID.fromString("特征UUID"));
3. 读写数据
使用BluetoothGattCharacteristic的readValue()和writeValue()方法读写数据。
BluetoothGattCharacteristic characteristic = ...;
BluetoothGatt gatt = ...;
// 读取数据
byte[] data = characteristic.readValue();
// 写入数据
characteristic.setValue(data);
gatt.writeCharacteristic(characteristic);
五、实战案例:蓝牙温度计
以下是一个简单的蓝牙温度计案例,演示了如何实现蓝牙连接、数据读取和显示。
// 1. 扫描设备
// 2. 连接设备
// 3. 读取温度数据
BluetoothGattCharacteristic characteristic = ...;
byte[] data = characteristic.readValue();
float temperature = ...; // 将数据转换为温度值
// 4. 显示温度
TextView textView = ...;
textView.setText("当前温度:" + temperature + "℃");
六、总结
本文从蓝牙基础、开发环境搭建、设备扫描与连接、数据传输等方面,全面介绍了Android蓝牙开发。希望本文能帮助你快速入门蓝牙开发,并在实际项目中应用所学知识。