Android 开发低功耗蓝牙(BLE)扫描配对连接指南

低功耗蓝牙(BLE)是一种优化过的蓝牙技术,适用于能耗低、需要快速传输数据的设备。在这篇文章中,我将教您如何在 Android 应用中实现 BLE 扫描、配对和连接。我们首先了解整个流程,然后逐步进行具体的实现。

流程简介

实现 BLE 扫描和连接的过程可以分为几个主要步骤,以下是这些步骤的概述:

步骤 描述
1. 权限申请 在 AndroidManifest.xml 中声明权限
2. 检查设备支持 确保设备支持 BLE 和蓝牙功能
3. 初始化 BLE 获取 BluetoothAdapter 实例
4. 开始扫描 启动 BLE 设备的扫描过程
5. 连接设备 选择设备并进行连接
6. 配对设备 如果需要,进行配对
7. 数据传输 通过连接进行数据传输
8. 断开连接 完成后断开设备连接

每一步的实现

接下来,我们将逐步解释每一个步骤,并给出相关代码示例。

1. 权限申请

首先,我们需要在 AndroidManifest.xml 文件中声明蓝牙和位置权限,因为 BLE 扫描需要访问位置权限:

<manifest xmlns:android="
    package="com.example.bleexample">

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    
    <application
        ... >
        ...
    </application>
</manifest>

2. 检查设备支持

在您的 Activity 中,您需要检查设备是否支持 BLE:

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();

if (bluetoothAdapter == null || !bluetoothAdapter.isMultipleAdvertisementSupported()) {
    // 设备不支持 BLE
}

3. 初始化 BLE

当确认 BLE 支持后,您可以获取 BluetoothAdapter 实例。打开蓝牙:

if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

4. 开始扫描

您可以通过 BluetoothLeScanner 启动 BLE 设备的扫描:

BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        super.onScanResult(callbackType, result);
        // 处理找到的设备
    }
};

bluetoothLeScanner.startScan(scanCallback);

5. 连接设备

当您扫描到设备后,可以选定一个设备连接:

BluetoothDevice device = result.getDevice(); // 从 ScanResult 中获取设备
BluetoothGatt bluetoothGatt = device.connectGatt(this, false, bluetoothGattCallback);

6. 配对设备

如果您的设备需要配对,可以通过以下代码进行配对:

device.createBond(); // 创建配对

7. 数据传输

连接成功后,您可以通过 BluetoothGatt 实例进行数据传输:

BluetoothGattService service = bluetoothGatt.getService(YOUR_SERVICE_UUID);
BluetoothGattCharacteristic characteristic = service.getCharacteristic(YOUR_CHARACTERISTIC_UUID);

// 读取数据
bluetoothGatt.readCharacteristic(characteristic);

// 写入数据
characteristic.setValue(YOUR_DATA);
bluetoothGatt.writeCharacteristic(characteristic);

8. 断开连接

最后,当您完成与设备的交互后,可以断开连接:

bluetoothGatt.disconnect();
bluetoothGatt.close();

数据流关系图

在整个BLE数据传输过程中,各个组件之间的关系可以通过以下关系图呈现:

erDiagram
    Device {
        String name
        String address
    }

    BluetoothGatt {
        String serviceUUID
        String characteristicUUID
        Byte[] data
    }

    Device ||--o| BluetoothGatt : connectsTo

总结

在本指南中,我们详细介绍了在 Android 中实现 BLE 扫描、配对和连接的每一个步骤。我们展示了每一步所需的代码并附上了注释,以确保您可以理解代码的功能。

从申请权限开始,检查设备支持,直到数据传输和断开连接,您现在应该能够独立地实现一个简单的 BLE 应用。如果您在开发中还有其他问题,不妨参考 Android 官方文档或BLE开发者社区。继续探索,祝您在 Android 开发的道路上越走越远!