Android 低功耗蓝牙扫描、配对与连接指南

在本教程中,我们将学习如何在Android应用中实现低功耗蓝牙(LE)的扫描、配对和连接功能。整个过程可以简单拆分为几个主要步骤,下面是一个简要的流程表:

步骤 描述
1. 配置权限 在AndroidManifest.xml中声明相关权限
2. 初始化BluetoothAdapter 获取BluetoothAdapter对象
3. 开始扫描 使用BluetoothLeScanner进行设备扫描
4. 处理扫描结果 处理并显示扫描到的设备
5. 连接设备 连接到选定设备并处理连接状态
6. 进行数据传输 在连接成功后进行数据传输
7. 断开连接 处理设备断开连接的状态

步骤详解

1. 配置权限

AndroidManifest.xml中添加蓝牙和位置权限,以允许扫描操作。

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

2. 初始化BluetoothAdapter

使用BluetoothManager获取BluetoothAdapter对象。

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

3. 开始扫描

通过BluetoothLeScanner开始扫描附近的蓝牙设备。

BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        // 处理扫描结果
    }
};
bluetoothLeScanner.startScan(scanCallback); // 开始扫描

4. 处理扫描结果

onScanResult方法中,处理扫描到的设备结果。

@Override
public void onScanResult(int callbackType, ScanResult result) {
    BluetoothDevice device = result.getDevice();
    // 连接或显示设备信息
    Log.d("BLEDevice", "Device found: " + device.getName() + ", " + device.getAddress());
}

5. 连接设备

选择要连接的设备,并使用BluetoothGatt进行连接。

BluetoothDevice device; // 假设这是选中的设备
BluetoothGatt bluetoothGatt = device.connectGatt(this, false, new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            // 连接成功,开始服务发现
            gatt.discoverServices();
        }
    }
});

6. 进行数据传输

onServicesDiscovered中,可以进行数据传输。

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
    if (status == BluetoothGatt.GATT_SUCCESS) {
        // 获取服务和特征,进行数据传输
    }
}

7. 断开连接

当完成数据传输后,断开连接。

bluetoothGatt.disconnect(); // 断开连接
bluetoothGatt.close(); // 释放资源

类图

以下是相关类之间的关系和结构:

classDiagram
    class BluetoothManager {
        +getAdapter()
    }
    class BluetoothAdapter {
        +getBluetoothLeScanner()
    }
    class BluetoothLeScanner {
        +startScan()
    }
    class ScanCallback {
        +onScanResult()
    }
    class BluetoothDevice {
        +connectGatt()
    }
    class BluetoothGatt {
        +discoverServices()
        +disconnect()
        +close()
    }

旅行图

掌握整个流程的旅程可以用以下旅行图表示:

journey
    title Android BLE Connection Journey
    section Permissions
      User requests Bluetooth and Location Permissions: 5: User
    section Initialization
      User initializes BluetoothManager and gets BluetoothAdapter: 5: User
    section Scanning
      User starts scanning for devices: 4: User
      User receives device scan results: 4: System
    section Connection
      User connects to the selected BLE device: 5: User
      User learns connection state: 3: System
    section Data Transfer
      User sends/receives data: 2: User
    section Disconnection
      User disconnects from the BLE device: 4: User

结尾

通过上述步骤,我们基本上涵盖了在Android中实现低功耗蓝牙的搜索、配对和连接的全过程。随着您对这些代码逐步深入理解,您可以扩展更多的功能,比如处理多设备连接、数据写入等。希望这个教程能为您在蓝牙开发的旅程上提供帮助,如有疑问,请随时提问!