从零开始:轻松学会Android蓝牙开发全攻略

2026-10-27 0 阅读

蓝牙技术简介

蓝牙(Bluetooth)是一种短距离无线通信技术,允许设备在近距离内进行数据交换。在Android开发中,蓝牙应用广泛,从简单的数据传输到复杂的设备控制,蓝牙都扮演着重要角色。本文将从零开始,带你轻松学会Android蓝牙开发。

环境准备

在开始蓝牙开发之前,我们需要准备以下环境:

  1. Android Studio:Android官方集成开发环境。
  2. Android设备:用于测试蓝牙功能。
  3. 蓝牙设备:用于与Android设备进行通信。

蓝牙开发基础

1. 蓝牙协议

蓝牙协议分为以下几层:

  • 物理层:定义了蓝牙设备的无线通信规范。
  • 链路层:负责建立、管理和终止蓝牙连接。
  • 网络层:提供数据传输的寻址和路由功能。
  • 传输层:提供数据传输的可靠性和流量控制。
  • 应用层:定义了蓝牙应用的服务和协议。

2. 蓝牙API

Android平台提供了丰富的蓝牙API,包括:

  • BluetoothAdapter:管理蓝牙设备。
  • BluetoothDevice:表示一个蓝牙设备。
  • BluetoothSocket:用于建立蓝牙连接。
  • BluetoothServerSocket:用于监听蓝牙连接。

蓝牙开发步骤

1. 检查蓝牙设备状态

在开发蓝牙应用之前,首先需要检查设备是否支持蓝牙,以及蓝牙是否开启。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
} else if (!bluetoothAdapter.isEnabled()) {
    // 蓝牙未开启,跳转到蓝牙设置页面
} else {
    // 蓝牙已开启,可以继续开发
}

2. 扫描蓝牙设备

通过扫描蓝牙设备,我们可以获取附近可用的蓝牙设备列表。

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothScanner scanner = bluetoothAdapter.getScanner();
Set<BluetoothDevice> devices = scanner.getBondedDevices();
// 遍历设备列表,获取设备信息

3. 连接蓝牙设备

获取到蓝牙设备信息后,我们可以通过以下步骤连接到设备:

  1. 获取设备的MAC地址。
  2. 创建一个BluetoothSocket对象。
  3. 通过socket连接到设备。
BluetoothDevice device = ... // 获取设备信息
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(Bluetooth UUID);
socket.connect();

4. 传输数据

连接到蓝牙设备后,我们可以通过socket进行数据传输。

OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
// 发送数据
outputStream.write(data);
// 接收数据
int bytes = inputStream.read(data);

5. 断开连接

完成数据传输后,我们需要断开与设备的连接。

socket.close();

蓝牙开发实战

以下是一个简单的蓝牙通信示例:

  1. 服务端:创建一个服务端程序,用于监听蓝牙连接和接收数据。
  2. 客户端:创建一个客户端程序,用于连接服务端并发送数据。

服务端代码

public class BluetoothServer extends Thread {
    private BluetoothServerSocket serverSocket;
    private BluetoothSocket socket;
    private InputStream inputStream;
    private OutputStream outputStream;

    public BluetoothServer() {
        try {
            BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
            BluetoothServerSocket serverSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord("MyService", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
            this.serverSocket = serverSocket;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        try {
            socket = serverSocket.accept();
            inputStream = socket.getInputStream();
            outputStream = socket.getOutputStream();
            // 接收数据
            int bytes = inputStream.read(data);
            // 处理数据
            // 发送数据
            outputStream.write(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void cancel() {
        try {
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码

public class BluetoothClient extends Thread {
    private BluetoothSocket socket;
    private InputStream inputStream;
    private OutputStream outputStream;

    public BluetoothClient(BluetoothDevice device) {
        try {
            BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
            this.socket = socket;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        try {
            socket.connect();
            inputStream = socket.getInputStream();
            outputStream = socket.getOutputStream();
            // 发送数据
            outputStream.write(data);
            // 接收数据
            int bytes = inputStream.read(data);
            // 处理数据
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void cancel() {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

本文从零开始,介绍了Android蓝牙开发的基础知识、开发步骤和实战案例。通过学习本文,相信你已经掌握了蓝牙开发的基本技能。在实际开发中,你可以根据需求进行扩展和优化,让你的蓝牙应用更加完善。

分享到: