Android 蓝牙底层开发指南

在这个指南中,我们将带领你从零开始学习如何实现 Android 蓝牙底层通讯。蓝牙技术在移动设备间传输数据时非常重要。本文将逐步引导你完成整个开发过程,并提供详细的代码示例以及注释说明。

蓝牙开发流程概览

在开始之前,让我们先简要概述一下实现 Android 蓝牙底层通讯的基本步骤:

flowchart TD
    A[开始] --> B[获取蓝牙适配器]
    B --> C[检查蓝牙是否可用]
    C --> D[请求蓝牙权限]
    D --> E[开启蓝牙]
    E --> F[查找可用设备]
    F --> G[建立连接]
    G --> H[数据传输]
    H --> I[断开连接]
    I --> J[结束]

步骤详情

接下来,我们将逐步讲解每一个步骤具体需要做什么,并提供相应的代码示例。

步骤 操作说明
获取蓝牙适配器 通过 BluetoothAdapter 获取蓝牙适配器
检查蓝牙可用性 检查设备是否支持蓝牙
请求蓝牙权限 在 AndroidManifest.xml 请求必要的权限
开启蓝牙 启动蓝牙功能
查找可用设备 查找周围的蓝牙设备
建立连接 与选定的蓝牙设备建立连接
数据传输 通过已建立的连接进行数据传输
断开连接 结束数据传输后断开连接

详细步骤

1. 获取蓝牙适配器

我们首先需要获取蓝牙适配器,它是进行所有蓝牙操作的核心。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// 检查设备是否支持蓝牙
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
    Log.e("Bluetooth", "Device doesn't support Bluetooth");
}

2. 检查蓝牙是否可用

务必确认设备的蓝牙功能是开启的。

if (!bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, 1); // 请求开启蓝牙
}

3. 请求蓝牙权限

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"/> <!-- 对于发现设备 -->

在运行时,确保请求位置权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}

4. 开启蓝牙

如果用户同意开启蓝牙,接下来我们可以直接进入查找设备的阶段。

5. 查找可用设备

进行设备搜索的代码如下:

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
    for (BluetoothDevice device : pairedDevices) {
        Log.d("BluetoothDevice", device.getName() + " - " + device.getAddress());
    }
}
// 开始发现设备
bluetoothAdapter.startDiscovery();

6. 建立连接

要与设备建立连接,需要使用 BluetoothSocket

BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
try {
    socket.connect(); // 连接到设备
} catch (IOException e) {
    Log.e("Bluetooth", "Connection failed", e);
}

7. 数据传输

数据传输的示例如下:

OutputStream outputStream = socket.getOutputStream();
String message = "Hello Bluetooth";
outputStream.write(message.getBytes()); // 发送数据

// 读取数据
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int numBytes = inputStream.read(buffer); // 读取数据
String receivedMessage = new String(buffer, 0, numBytes);
Log.d("Bluetooth", "Received: " + receivedMessage);

8. 断开连接

最后,传输结束后,别忘了关闭连接:

try {
    socket.close(); // 关闭连接
} catch (IOException e) {
    Log.e("Bluetooth", "Could not close the connection", e);
}

结论

本文简要介绍了如何在 Android 中实现蓝牙底层通讯。通过遵循以上步骤,你可以成功地与其他蓝牙设备建立连接并进行数据传输。请务必在真实设备上进行测试,以获得最佳体验。随着你对蓝牙编程的深入了解,你将会发现更复杂的应用场景和功能。希望这篇指南能帮助你顺利入门,祝你开发愉快!