Android 蓝牙串口操作类

在 Android 开发中,蓝牙通信是一个非常重要的功能,尤其是与串口设备交互时。本文将介绍如何使用 Android 的蓝牙 API 实现串口操作,包括简单的代码示例和类图。在实现过程中,我们将遇到几个关键步骤,帮助大家更好地理解蓝牙串口通信的工作原理。

1. 蓝牙权限

首先,确保应用具备蓝牙和位置权限。在 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"/>

在 Android 6.0 及以上版本,还需要在运行时请求这些权限。

2. 创建蓝牙串口操作类

下面是一个简单的蓝牙串口操作类的示例,命名为 BluetoothSP,用于打开蓝牙设备、发送和接收数据。

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.util.Log;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

public class BluetoothSP {
    private BluetoothAdapter bluetoothAdapter;
    private BluetoothSocket bluetoothSocket;
    private OutputStream outputStream;
    private InputStream inputStream;
    private static final UUID SERIAL_PORT_SERVICE_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

    public BluetoothSP() {
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    }

    public void connect(BluetoothDevice device) {
        try {
            bluetoothSocket = device.createRfcommSocketToServiceRecord(SERIAL_PORT_SERVICE_UUID);
            bluetoothSocket.connect();
            outputStream = bluetoothSocket.getOutputStream();
            inputStream = bluetoothSocket.getInputStream();
        } catch (IOException e) {
            Log.e("BluetoothSP", "Connection failed", e);
        }
    }

    public void sendData(byte[] data) {
        try {
            outputStream.write(data);
        } catch (IOException e) {
            Log.e("BluetoothSP", "Send failed", e);
        }
    }

    public byte[] receiveData() {
        byte[] buffer = new byte[1024];
        int bytes;
        try {
            bytes = inputStream.read(buffer);
            return buffer; // 返回接收到的数据
        } catch (IOException e) {
            Log.e("BluetoothSP", "Receive failed", e);
            return null;
        }
    }

    public void disconnect() {
        try {
            bluetoothSocket.close();
        } catch (IOException e) {
            Log.e("BluetoothSP", "Disconnect failed", e);
        }
    }
}

3. 使用示例

在 Activity 中使用 BluetoothSP 类进行蓝牙通信的示例:

BluetoothDevice device = ...; // 获取蓝牙设备
BluetoothSP bluetoothSP = new BluetoothSP();
bluetoothSP.connect(device);

// 发送数据
byte[] dataToSend = "Hello, Bluetooth!".getBytes();
bluetoothSP.sendData(dataToSend);

// 接收数据
byte[] receivedData = bluetoothSP.receiveData();
if (receivedData != null) {
    String receivedMessage = new String(receivedData);
    Log.d("BluetoothSP", "Received: " + receivedMessage);
}

// 断开连接
bluetoothSP.disconnect();

4. 旅行图

在实现蓝牙串口操作过程中,开发者通常会经历以下一些步骤:

journey
    title 蓝牙串口操作的旅程
    section 开始
      初始化蓝牙适配器: 5: developer
    section 探索设备
      查找可用蓝牙设备: 4: developer
    section 连接设备
      连接到选择的设备: 4: developer
    section 数据传输
      发送和接收数据: 5: developer
    section 结束
      断开连接: 5: developer

5. 类图

接下来,展示 BluetoothSP 的类图,以帮助理解其内部结构。

classDiagram
    class BluetoothSP {
        +BluetoothAdapter bluetoothAdapter
        +BluetoothSocket bluetoothSocket
        +OutputStream outputStream
        +InputStream inputStream
        +connect(BluetoothDevice device)
        +sendData(byte[] data)
        +receiveData() byte[]
        +disconnect()
    }

结论

通过以上的介绍和代码示例,相信你对 Android 中的蓝牙串口通信有了更深入的了解。BluetoothSP 类简单地封装了蓝牙操作的基本功能,使我们能够快速地实现蓝牙与串口设备之间的通信。希望在你的项目中,能够灵活运用这一类,实现更丰富的功能!