在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!