Android 蓝牙通讯入门

在Android开发中,蓝牙通讯是实现设备间信息交换的重要手段。特别是在物联网(IoT)应用中,蓝牙通讯显得尤为重要。本文将为刚入行的小白详细解说如何实现两个Android设备之间的蓝牙通讯。

蓝牙通讯流程

下面是实现两个蓝牙设备通讯的概述流程:

步骤 描述
1 初始化蓝牙适配器
2 开设蓝牙设备可见性
3 搜索可用蓝牙设备
4 选择设备并建立连接
5 进行数据传输
6 断开连接

步骤详细说明

下面我们逐步实现上述流程。每一步都提供相关的代码示例和注释。

1. 初始化蓝牙适配器

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// 检查设备是否支持蓝牙
if (bluetoothAdapter == null) {
    // 当前设备不支持蓝牙
    Log.e("Bluetooth", "This device does not support Bluetooth");
}
  • 解释: BluetoothAdapter是蓝牙的入口点。在这里我们检查设备是否支持蓝牙。

2. 开设蓝牙设备可见性

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); // 300秒可见性
startActivity(discoverableIntent);
  • 解释: 这段代码请求用户允许设备在300秒内对其他蓝牙设备可见。

3. 搜索可用蓝牙设备

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
    for (BluetoothDevice device : pairedDevices) {
        Log.d("Bluetooth", "Paired device: " + device.getName() + " - " + device.getAddress());
    }
}
  • 解释: 获取已配对的设备并打印其名称和地址。在实际应用中,你可能会显示这些设备供用户选择。

4. 选择设备并建立连接

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
BluetoothSocket bluetoothSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
bluetoothSocket.connect(); // 连接设备
  • 解释: createRfcommSocketToServiceRecord用于创建一个连接通道,MY_UUID是服务的UUID,必须是唯一的。在此处,deviceAddress为目标设备的MAC地址。

5. 进行数据传输

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

// 发送数据
String message = "Hello Device!";
outputStream.write(message.getBytes());

// 接收数据
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
String receivedMessage = new String(buffer, 0, bytesRead);
Log.d("Bluetooth", "Received: " + receivedMessage);
  • 解释: 通过输出流发送数据,并通过输入流接收数据。在这里,我们使用字节数组来处理数据。

6. 断开连接

bluetoothSocket.close();
  • 解释: 最后要记得关闭蓝牙套接字以释放资源。

饼状图:蓝牙通讯流程

pie
    title 蓝牙通讯流程
    "初始化蓝牙适配器": 15
    "开设可见性": 15
    "搜索设备": 20
    "建立连接": 25
    "数据传输": 15
    "断开连接": 10

状态图:蓝牙通讯状态

stateDiagram
    [*] --> 未初始化
    未初始化 --> 指定蓝牙适配器 : 初始化
    指定蓝牙适配器 --> 可见性状态 : 请求可见性
    可见性状态 --> 搜索状态
    搜索状态 --> 选择设备 : 找到设备
    选择设备 --> 建立连接
    建立连接 --> 数据传输 : 连接成功
    数据传输 --> 断开连接 : 完成数据传输
    断开连接 --> [*]

结尾

通过以上六个步骤,我们可以实现两个Android设备之间的蓝牙通讯。在实际开发中,你还需要处理各种异常情况,例如连接失败、数据传输错误等。希望这篇文章能够为你的开发旅程提供帮助。未来,你可以进一步探索蓝牙低能耗(BLE)等高级功能,扩展你的应用能力。祝你编程愉快!