实现经典蓝牙 Android SPP UUID 的指南

在开发蓝牙应用时,经典蓝牙(Classic Bluetooth)和串行端口配置(SPP)都是非常重要的部分。本文将引导你如何实现经典蓝牙 Android SPP UUID,包括流程步骤、每一步的实现方法以及相关代码。

整体流程

以下表格总结了实现 SPP UUID 的步骤:

步骤 描述
1 确认使用的 Bluetooth 权限
2 创建 BluetoothAdapter
3 扫描可用设备并连接
4 获取 SPP UUID
5 进行数据传输
6 关闭连接

步骤详解

1. 确认使用的 Bluetooth 权限

AndroidManifest.xml 文件中添加必要的权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  • BLUETOOTH:允许应用程序使用 Bluetooth 功能。
  • BLUETOOTH_ADMIN:允许应用程序发现和配对 Bluetooth 设备。

2. 创建 BluetoothAdapter

在你的 Activity 或 Fragment 中,初始化 BluetoothAdapter:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
    Toast.makeText(this, "该设备不支持蓝牙", Toast.LENGTH_SHORT).show();
}
  • BluetoothAdapter:这是进行 Bluetooth 操作的入口,确保设备支持蓝牙。

3. 扫描可用设备并连接

开始扫描可用设备并连接到指定设备。这里以设备地址 deviceAddress 为例:

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
BluetoothDevice targetDevice = null;

for (BluetoothDevice device : pairedDevices) {
    if (device.getAddress().equals(deviceAddress)) {
        targetDevice = device;
        break;
    }
}

if (targetDevice != null) {
    try {
        BluetoothSocket socket = targetDevice.createRfcommSocketToServiceRecord(MY_UUID);
        socket.connect();
    } catch (IOException e) {
        e.printStackTrace();
    }
} else {
    Toast.makeText(this, "未找到设备", Toast.LENGTH_SHORT).show();
}
  • getBondedDevices():获取已经配对的设备列表。
  • createRfcommSocketToServiceRecord(MY_UUID):创建用于特定 UUID 的 BluetoothSocket

4. 获取 SPP UUID

你需要定义一个 UUID 用于 SPP。以下是一个示例 UUID:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  • MY_UUID:这段 UUID 代表 SPP 服务。

5. 进行数据传输

通过建立好的 BluetoothSocket 进行输入和输出流的数据传输:

InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();

outputStream.write("Hello, Bluetooth!".getBytes()); // 发送数据

byte[] buffer = new byte[1024];
int bytes;
while ((bytes = inputStream.read(buffer)) != -1) {
    String received = new String(buffer, 0, bytes);
    Log.d("Received", received);
}
  • getInputStream()getOutputStream():获取传输数据所需的输入和输出流。

6. 关闭连接

完成通信后,确保关闭 BluetoothSocket:

try {
    socket.close();
} catch (IOException e) {
    e.printStackTrace();
}
  • close():关闭 socket 以释放资源。

关系图

使用 mermaid 语法,以下是本流程的关系图:

erDiagram
    BluetoothAdapter {
        string name
        string address
    }
    BluetoothDevice {
        string name
        string address
    }
    BluetoothSocket {
        string uuid
    }
    BluetoothAdapter ||--o| BluetoothDevice : connects
    BluetoothDevice ||--o| BluetoothSocket : creates

总结

通过上述步骤,你可以轻松设置并使用经典蓝牙 SPP UUID 的通信功能。确保每一步操作都遵循上述代码和注释的指引,这将有助于增强你的理解和实现能力。随着对蓝牙技术的深入了解,你将在实际应用中构建更复杂的应用程序。继续加油,与蓝牙的世界亲密接触吧!