Android 蓝牙开发指南:经典蓝牙的连接

随着智能设备的普及,蓝牙技术已成为我们生活中不可或缺的一部分。在Android平台上,经典蓝牙(Classic Bluetooth)支持设备之间的无线连接,使我们能够轻松传输数据和进行设备控制。本文将全面介绍如何在Android中实现经典蓝牙的连接,包括代码示例和流程图,以帮助开发者更好地理解这一过程。

经典蓝牙连接流程

在进行经典蓝牙连接时,我们可以将过程划分为几个主要步骤:

  1. 初始化蓝牙适配器:获取设备的蓝牙适配器。
  2. 开启蓝牙:确保蓝牙功能已开启。
  3. 查找设备:搜索附近的蓝牙设备。
  4. 配对设备:与目标蓝牙设备进行配对。
  5. 建立连接:建立与配对设备的连接。
  6. 数据传输:通过输入输出流进行数据传输。

下面是这个连接过程的流程图:

初始化蓝牙适配器 开启蓝牙 查找设备 配对设备 建立连接 数据传输

第一步:初始化蓝牙适配器

首先,我们需要获取设备的蓝牙适配器。在Android中,可以通过以下代码实现:

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
    // 设备不支持蓝牙
    Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

第二步:开启蓝牙

我们需要检查蓝牙是否已经开启,如果未开启,则请求用户开启蓝牙:

if (!bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
  • 1.
  • 2.
  • 3.
  • 4.

第三步:查找设备

使用 startDiscovery() 方法查找周围的蓝牙设备,同时需要注册广播接收器以获取设备发现的结果:

bluetoothAdapter.startDiscovery();

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // 获取到设备
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // 处理设备逻辑
        }
    }
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

第四步:配对设备

当用户选择具体的设备进行配对时,我们需要调用 createBond() 方法:

BluetoothDevice device = ...; // 获取到的设备
try {
    Method method = device.getClass().getMethod("createBond", (Class[]) null);
    method.invoke(device, (Object[]) null);
} catch (Exception e) {
    e.printStackTrace();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第五步:建立连接

连接蓝牙设备通常会使用 BluetoothSocket,以下是连接的代码示例:

BluetoothSocket socket = null;
try {
    socket = device.createRfcommSocketToServiceRecord(MY_UUID);
    socket.connect();
} catch (IOException e) {
    e.printStackTrace();
}
// 连接成功后即可进行数据传输
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

第六步:数据传输

建立连接后,可以通过输入输出流传输数据:

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

// 发送数据
outputStream.write(data);

// 接收数据
byte[] buffer = new byte[1024];
int bytesRead = inputStream.read(buffer);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

类图

下面的类图展示了经典蓝牙连接中涉及的主要类:

1 1 BluetoothAdapter +static BluetoothAdapter getDefaultAdapter() +startDiscovery() +isEnabled() BluetoothDevice +createBond() +createRfcommSocketToServiceRecord() +getName() BluetoothSocket +connect() +getOutputStream() +getInputStream()

结论

通过以上步骤和代码示例,我们了解了如何在Android中实现经典蓝牙的连接。这一过程涉及蓝牙适配器的初始化、设备发现、配对、连接以及数据传输等多个环节。在实际开发中,处理蓝牙连接时也需要注意及时关闭连接以及释放资源,以避免内存泄露和其他潜在问题。希望这篇文章对您在Android蓝牙开发中有所帮助!