Android 蓝牙主从模式实现指南
在众多蓝牙应用中,主从模式是一种常见的通信模式,其中一台设备作为主设备(Master),另一台设备作为从设备(Slave)。本文将向你介绍如何在 Android 中实现这一模式。我们将通过一个简单的流程来讲解,步骤清晰并配以示例代码。
流程概述
下面表格展示了实现蓝牙主从模式的基本步骤:
| 步骤 | 描述 |
|---|---|
| 步骤 1 | 检查蓝牙权限 |
| 步骤 2 | 初始化 BluetoothManager |
| 步骤 3 | 扫描设备 |
| 步骤 4 | 连接从设备 |
| 步骤 5 | 进行数据通信 |
| 步骤 6 | 断开连接 |
实现步骤详解
步骤 1: 检查蓝牙权限
确保应用程序有必要的蓝牙权限,包括 BLUETOOTH、BLUETOOTH_ADMIN 和 ACCESS_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 蓝牙主从模式的基本实现。虽然这只是一个简单的示范,但你可以根据实际的应用需求扩展功能,例如处理多种设备连接、错误处理和数据加密等。蓝牙技术丰富且灵活,掌握了基础后,可以不断深入探索更多应用场景。希望你在这个学习过程中能够享受编码的乐趣!
















