Android 蓝牙通讯 BLE 实现教程
简介
在本教程中,我将教授你如何在 Android 设备上实现蓝牙低功耗(BLE)通信。我们将使用 Android 提供的 Bluetooth Low Energy API 来建立设备之间的通信连接。本教程的目标是让你理解整个通信流程,并能够在自己的应用程序中成功实现蓝牙通信。
整体流程
下表展示了建立 BLE 通信所需的步骤及其对应的代码示例:
步骤 | 代码示例 |
---|---|
1. 初始化蓝牙适配器 | BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter(); |
2. 检查设备是否支持 BLE | if (bluetoothAdapter == null || !getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { // 设备不支持 BLE } |
3. 打开蓝牙 | if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } |
4. 扫描周围的 BLE 设备 | bluetoothAdapter.startLeScan(leScanCallback); |
5. 处理扫描结果 | private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { runOnUiThread(new Runnable() { @Override public void run() { // 处理扫描到的设备 } }); } }; |
6. 停止扫描 | bluetoothAdapter.stopLeScan(leScanCallback); |
7. 连接设备 | BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress); BluetoothGatt gatt = device.connectGatt(this, false, gattCallback); |
8. 处理连接状态变化 | private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { // 设备连接成功 } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { // 设备断开连接 } } }; |
9. 发现可用服务 | gatt.discoverServices(); |
10. 处理服务发现结果 | private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // 服务发现成功 } else { // 服务发现失败 } } }; |
11. 读取特征值 | BluetoothGattService service = gatt.getService(serviceUUID); BluetoothGattCharacteristic characteristic = service.getCharacteristic(characteristicUUID); gatt.readCharacteristic(characteristic); |
12. 处理特征值读取结果 | private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // 特征值读取成功 } else { // 特征值读取失败 } } }; |
13. 写入特征值 | characteristic.setValue(value); gatt.writeCharacteristic(characteristic); |
14. 处理特征值写入结果 | private BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // 特征值写入成功 } else { // 特征值写入失败 } } }; |
15. 断开设备连接 | gatt.disconnect(); |
代码解释
下面是每个步骤中使用的代码示例及其注释:
- 初始化蓝牙适配器:
BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
这段代码获取系统的蓝牙适配器。
- 检查设备是否支持 BLE:
if (bluetoothAdapter == null || !getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
// 设备不支持 BLE