Android BLE 蓝牙服务端实现指南

在这篇文章中,我们将学习如何实现 Android 蓝牙低能耗(BLE)服务端。这将为您提供必要的流程和代码示例,以便快速上手。

一、实现流程

首先,我们来看看实现 BLE 服务端的基本步骤,以下是流程图:

flowchart TD
    A[初始化 BLE] --> B[创建 BluetoothManager]
    B --> C[创建 BluetoothGattServer]
    C --> D[添加服务]
    D --> E[添加特征]
    E --> F[开始广播]
步骤 描述
1. 初始化 BLE 在应用程序中获取 BluetoothManager 以管理蓝牙操作。
2. 创建 BluetoothManager 创建 BluetoothManager 实例以进行 BLE 操作。
3. 创建 BluetoothGattServer 创建 BluetoothGattServer,处理来自客户端的请求。
4. 添加服务 定义 BLE 服务并添加到 GATT 服务器中。
5. 添加特征 定义特征并将其添加到服务中。
6. 开始广播 启动广播,让其他设备可以发现并连接到 BLE 服务。

二、实现步骤详解

1. 初始化 BLE

我们首先需要请求用户的蓝牙权限,并确保蓝牙已开启。

// 在您的 Activity 中添加
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
} else {
    if (!bluetoothAdapter.isEnabled()) {
        // 请求用户打开蓝牙
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
}

该段代码用于检查设备是否支持蓝牙并请求用户开启蓝牙。

2. 创建 BluetoothManager

接下来,获取 BluetoothManager 实例。

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

这里我们获取了 BluetoothManager 和 BluetoothAdapter,后者将用于 BLE 操作。

3. 创建 BluetoothGattServer

我们创建一个 GATT 服务器并实现其回调。

BluetoothGattServer bluetoothGattServer = bluetoothManager.openGattServer(this, gattServerCallback);

gattServerCallback是一个回调函数,需要实现以处理与客户端的连接。

4. 添加服务

定义 BLE 服务并将其添加到 GATT 服务器中。

BluetoothGattService sampleService = new BluetoothGattService(SERVICE_UUID, BluetoothGattService.SERVICE_TYPE_PRIMARY);
bluetoothGattServer.addService(sampleService);

使用 SERVICE_UUID 定义服务的唯一标识,并将其添加到服务器。

5. 添加特征

为服务添加特征。

BluetoothGattCharacteristic sampleCharacteristic = new BluetoothGattCharacteristic(
    CHARACTERISTIC_UUID,
    BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE,
    BluetoothGattCharacteristic.PERMISSIONS_READ | BluetoothGattCharacteristic.PERMISSIONS_WRITE
);
sampleService.addCharacteristic(sampleCharacteristic);

这里定义特征的 UUID、属性和权限并将特征添加到服务中。

6. 开始广播

最后,启动蓝牙广播使 BLE 服务可发现。

Intent intent = new Intent(BluetoothAdapter.ACTION_LE_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
sendBroadcast(intent);

此代码会使设备在 300 秒内可被发现。

三、类图

接下来,我们可以查看 BLE 相关类的 UML 类图,帮助您更好地理解结构:

classDiagram
    class BluetoothManager {
        +openGattServer(context, callback)
    }
    class BluetoothGattServer {
        +addService(service)
    }
    class BluetoothGattService {
        +addCharacteristic(characteristic)
    }
    class BluetoothGattCharacteristic {
    }
    BluetoothManager --> BluetoothGattServer
    BluetoothGattServer --> BluetoothGattService
    BluetoothGattService --> BluetoothGattCharacteristic

四、总结

通过以上步骤,您现在应该能够实现一个基本的 Android BLE 蓝牙服务端。在实际开发中,还可以扩展特征、添加更多的服务和特性,以及处理不同的 BLE 请求。希望这篇文章对您有所帮助,祝您在安卓开发中顺利!