Android 蓝牙主从模式实现指南

在众多蓝牙应用中,主从模式是一种常见的通信模式,其中一台设备作为主设备(Master),另一台设备作为从设备(Slave)。本文将向你介绍如何在 Android 中实现这一模式。我们将通过一个简单的流程来讲解,步骤清晰并配以示例代码。

流程概述

下面表格展示了实现蓝牙主从模式的基本步骤:

步骤 描述
步骤 1 检查蓝牙权限
步骤 2 初始化 BluetoothManager
步骤 3 扫描设备
步骤 4 连接从设备
步骤 5 进行数据通信
步骤 6 断开连接

实现步骤详解

步骤 1: 检查蓝牙权限

确保应用程序有必要的蓝牙权限,包括 BLUETOOTHBLUETOOTH_ADMINACCESS_FINE_LOCATION

<manifest xmlns:android="
    package="com.example.bluetoothdemo">
    
    <!-- 蓝牙权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

</manifest>

步骤 2: 初始化 BluetoothManager

我们需要获取 BluetoothAdapter 以及 BluetoothManager。

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

// 检查蓝牙是否开启
if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
    // 提示用户开启蓝牙
}

步骤 3: 扫描设备

扫描周围可连接的蓝牙设备。

// 开始搜索
bluetoothAdapter.startDiscovery();

// 设备发现的BroadcastReceiver
BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // 获得发现的设备
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceAddress = device.getAddress();
            // 将设备添加到列表中
        }
    }
};

// 注册广播接收器
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);

步骤 4: 连接从设备

连接到选择的从设备并建立双向通信。

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
try {
    BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
    socket.connect(); // 连接到设备
} catch (IOException e) {
    // 处理连接失败
}

步骤 5: 进行数据通信

可以通过输入输出流进行数据通信。

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

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

// 接收数据
byte[] buffer = new byte[1024];
int bytes;
bytes = inputStream.read(buffer);
String receivedMessage = new String(buffer, 0, bytes);

步骤 6: 断开连接

通信完成后,记得断开连接以释放资源。

try {
    socket.close(); // 断开连接
} catch (IOException e) {
    // 处理关闭失败
}

状态图

下面的状态图展示了蓝牙主从模式的基本状态转换。

stateDiagram
    [*] --> 提供蓝牙功能
    提供蓝牙功能 --> 搜索设备
    搜索设备 --> 连接设备
    连接设备 --> 进行数据通信
    进行数据通信 --> 断开连接
    断开连接 --> [*]

旅行图

接下来是实现蓝牙通信的旅行图,显示了用户的典型交互。

journey
    title 蓝牙主从模式实现旅行
    section 初始化
      用户获取蓝牙适配器: 5: 用户
      用户检查蓝牙权限: 4: 用户
    section 发现设备
      用户开始搜索设备: 3: 用户
      用户选择一个设备: 4: 用户
    section 建立连接
      用户连接到设备: 5: 用户
    section 数据交换
      用户发送消息: 5: 用户
      用户接收数据: 5: 用户
    section 结束连接
      用户断开连接: 5: 用户

结尾

通过上述步骤,你已经成功掌握了 Android 蓝牙主从模式的基本实现。虽然这只是一个简单的示范,但你可以根据实际的应用需求扩展功能,例如处理多种设备连接、错误处理和数据加密等。蓝牙技术丰富且灵活,掌握了基础后,可以不断深入探索更多应用场景。希望你在这个学习过程中能够享受编码的乐趣!