在Android中使用BluetoothGatt和UUID

引言

随着智能设备的普及,蓝牙技术在我们的生活中扮演着越来越重要的角色。Android平台提供了对蓝牙的强大支持,尤其是在与BLE(蓝牙低能耗)设备进行交互时。本文将介绍如何在Android中使用BluetoothGatt,并查看UUID(通用唯一标识符)。

什么是BluetoothGatt和UUID?

BluetoothGatt

BluetoothGatt是Android中用于与BLE设备进行交互的类。它允许应用程序通过GATT(通用属性配置文件)协议与BLE设备进行通讯,包括读取和写入特征值、设置通知等操作。

UUID

UUID是用来唯一标识BLE服务和特性的标识符。在BLE设备中,每个服务和特性都有一个唯一的UUID,使得客户端能够准确地请求特定的功能。

BluetoothGatt的基本使用

下面我们将展示如何使用BluetoothGatt与BLE设备进行连接并查看UUID。

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. 扫描BLE设备

使用BluetoothAdapter扫描可用的BLE设备:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
List<ScanFilter> filters = new ArrayList<>();
ScanSettings settings = new ScanSettings.Builder().build();

bluetoothLeScanner.startScan(filters, settings, scanCallback);

3. 连接到BLE设备

当找到BLE设备时,可以使用BluetoothGatt连接到它:

BluetoothDevice device = ...; // 获取扫描到的设备
BluetoothGatt bluetoothGatt = device.connectGatt(context, false, gattCallback);

4. Gatt回调

实现BluetoothGattCallback,以处理不同状态的回调:

private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            Log.i("BluetoothGatt", "Connected to GATT server.");
            gatt.discoverServices();
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            Log.i("BluetoothGatt", "Disconnected from GATT server.");
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            List<BluetoothGattService> services = gatt.getServices();
            for (BluetoothGattService service : services) {
                Log.i("Service UUID", service.getUuid().toString());
            }
        } else {
            Log.w("BluetoothGatt", "onServicesDiscovered received: " + status);
        }
    }
};

查看UUID

onServicesDiscovered方法中,我们获取到BLE设备的服务并打印出每个服务的UUID。记得在实际应用中根据你的需求做进一步处理。

旅程图

下面是本次流程的旅程图:

journey
    title 使用BluetoothGatt的旅程
    section 开始扫描设备
      开始扫描: 5: 用户
      发现设备: 3: 系统
    section 连接BLE设备
      连接状态变化: 4: 系统
      发现服务: 5: 系统
    section 查看UUID
      打印UUID: 5: 用户

流程图

以下是连接和查看BLE设备UUID的流程图:

flowchart TD
    A[开始] --> B[获取BluetoothAdapter]
    B --> C[开始扫描BLE设备]
    C --> D{发现设备?}
    D -- 错误 --> E[结束]
    D -- 是 --> F[连接到BLE设备]
    F --> G[设置Gatt的回调]
    G --> H[连接状态变化]
    H --> I[发现服务]
    I --> J[获取UUID]
    J --> K[结束]

结论

通过使用BluetoothGatt,开发者可以方便地与BLE设备进行交互,并轻松获取到设备的服务和特性UUID。理解和掌握这些基本概念对开发蓝牙应用至关重要。希望本文能为您提供清晰的指导,帮助您更好地使用Android蓝牙功能。如果您在实现过程中遇到任何问题,请随时查看Android官方文档或相关资源。Happy coding!