Android 蓝牙发送接收数据实现步骤

1. 确认设备是否支持蓝牙功能

在开始实现蓝牙发送和接收数据之前,首先需要确认设备是否支持蓝牙功能。可以通过以下代码来判断:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
} else {
    // 设备支持蓝牙
}

2. 打开蓝牙

在确认设备支持蓝牙功能后,需要打开蓝牙以便进行数据的发送和接收。可以通过以下代码来打开蓝牙:

if (!bluetoothAdapter.isEnabled()) {
    Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBluetoothIntent, REQUEST_ENABLE_BT);
}

这段代码会弹出一个系统对话框,让用户选择是否打开蓝牙。如果用户选择打开蓝牙,会回调 onActivityResult 方法,并且 requestCode 为 REQUEST_ENABLE_BT。

3. 搜索蓝牙设备

在蓝牙打开成功后,需要搜索附近的蓝牙设备以便进行连接。可以通过以下代码来搜索蓝牙设备:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bluetoothAdapter.startDiscovery();

这段代码会开启一个异步的搜索过程,并且会通过广播的方式传递搜索到的蓝牙设备信息。可以通过注册一个 BroadcastReceiver 来接收搜索到的蓝牙设备信息。

4. 连接蓝牙设备

当搜索到蓝牙设备后,需要选择一个设备进行连接。可以通过以下代码来连接蓝牙设备:

BluetoothDevice device = ...; // 获取到要连接的蓝牙设备
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
socket.connect();

其中,MY_UUID 是一个唯一标识符,用于识别服务端的蓝牙设备。可以使用 UUID.fromString(String) 方法来将字符串转换为 UUID。

5. 发送数据

在成功连接蓝牙设备后,可以通过 BluetoothSocket 的 OutputStream 来发送数据。可以通过以下代码来发送数据:

BluetoothSocket socket = ...; // 已连接的蓝牙设备
OutputStream outputStream = socket.getOutputStream();
String message = "Hello, Bluetooth!";
outputStream.write(message.getBytes());

这段代码将会将字符串 "Hello, Bluetooth!" 转换为字节数组,并通过 OutputStream 发送出去。

6. 接收数据

在成功连接蓝牙设备后,可以通过 BluetoothSocket 的 InputStream 来接收数据。可以通过以下代码来接收数据:

BluetoothSocket socket = ...; // 已连接的蓝牙设备
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String message = new String(buffer, 0, length);

这段代码会从 InputStream 中读取数据,并将其转换为字符串。

7. 关闭连接

当数据发送和接收完成后,需要关闭蓝牙连接以释放资源。可以通过以下代码来关闭连接:

BluetoothSocket socket = ...; // 已连接的蓝牙设备
socket.close();

这段代码会关闭蓝牙连接。

以上就是实现 Android 蓝牙发送接收数据的流程和每一步需要做的事情。接下来,让我们来看一下相关的类图和甘特图。

类图

classDiagram
    class BluetoothAdapter
    class BluetoothDevice
    class BluetoothSocket
    class OutputStream
    class InputStream

    BluetoothAdapter --> "*" BluetoothDevice
    BluetoothDevice --> "*" BluetoothSocket
    BluetoothSocket --> OutputStream
    BluetoothSocket --> InputStream

以上是相关类之间的关系示意图,BluetoothAdapter 是蓝牙适配器类,用于管理蓝牙功能;BluetoothDevice 是蓝牙设备类,用于表示一个蓝牙设备;BluetoothSocket 是蓝牙连接的套接字;OutputStream 和 InputStream 分别用于发送和接收数据。

甘特图

gantt
    title Android 蓝牙发送接收数据实现甘