Android 蓝牙 SPP 模式使用指南

引言

蓝牙串口配置文件(SPP,Serial Port Profile)是一种广泛用于设备之间串行通信的协议。在Android设备开发中,SPP使得通过蓝牙实现数据传输成为可能。本文将介绍如何在Android应用中使用蓝牙SPP模式,并提供相应的代码示例。

蓝牙 SPP 原理

SPP允许设备之间以串行数据的方式进行通信,常用于将手机与其他蓝牙设备(如传感器或微控制器)连接。通过建立蓝牙连接,设备可以互相发送和接收数据,从而实现更丰富的功能。

主要步骤

在Android中实现蓝牙SPP主要包括以下几个步骤:

  1. 检查蓝牙功能:确保设备支持蓝牙并且已经开启。
  2. 寻找蓝牙设备:扫描并列出可连接的蓝牙设备。
  3. 连接设备:与选定的设备建立连接。
  4. 数据传输:通过输入输出流进行数据读写。

下面是实现这些步骤的代码示例。

代码示例

权限设置

首先,在 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"/>

蓝牙初始化

在你的Activity中,创建一个实例并初始化蓝牙适配器:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
    Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show();
}
if (!bluetoothAdapter.isEnabled()) {
    // 请求用户开启蓝牙
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

搜索并连接设备

要搜索可用的蓝牙设备并进行连接,可以使用以下代码:

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
    // 打印可配对设备的名称和地址
    Log.d("BluetoothDevice", "Name: " + device.getName() + ", Address: " + device.getAddress());
}
BluetoothDevice deviceToConnect = bluetoothAdapter.getRemoteDevice("DEVICE_ADDRESS");
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // SPP的UUID
BluetoothSocket bluetoothSocket = deviceToConnect.createRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();

数据传输

一旦连接,你可以通过输入输出流进行数据传输:

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

// 发送数据
outputStream.write("Hello SPP".getBytes());

// 接收数据
byte[] buffer = new byte[1024];
int bytes;
bytes = inputStream.read(buffer); // 阻塞方法,直到接收数据
String receivedData = new String(buffer, 0, bytes);
Log.d("ReceivedData", receivedData);

ER关系图

以下是蓝牙设备的ER关系图,展示了设备连接的基本元素:

erDiagram
    BluetoothDevice {
        string name
        string address
    }
    BluetoothSocket {
        integer id
        string uuid
    }
    BluetoothDevice ||--o| BluetoothSocket : connects

结论

通过上述步骤和代码示例,您可以在Android应用中实现基本的蓝牙SPP通信。这为开发各种无线数据传输应用提供了基础。无论是与传感器交流数据,还是与其他智能设备进行交互,SPP共同构建了蓝牙应用的核心。希望这篇文章能帮助您在蓝牙开发中取得更大的进展!