建立连接

在Android平台上,与远程蓝牙设备通信的第一步是建立连接。此过程涉及以下步骤:

  1. 获取目标设备: 首先,需要获取代表目标蓝牙设备的BluetoothDevice对象。
  2. 创建蓝牙套接字: 使用BluetoothDevice对象的createRfcommSocketToServiceRecord(UUID)方法创建一个BluetoothSocket。UUID是用于标识服务的唯一标识符,确保客户端和服务器使用相同的UUID至关重要。
  3. 发起连接: 调用BluetoothSocketconnect()方法发起连接请求。如果远程设备接受连接,则双方将共享一个RFCOMM信道,connect()方法将返回。

重要提示:

  • 建议在一个独立的线程中调用connect()方法,因为它是一个阻塞操作。
  • 不要在设备发现过程中发起连接,因为这会降低发现速度并可能导致连接失败。
  • 数据传输完成后,务必调用close()方法关闭连接,以释放系统资源。

代码示例

private class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;

    public ConnectThread(BluetoothDevice device) {
        // 使用临时对象,因为mmSocket是final类型的
        BluetoothSocket tmp = null;
        mmDevice = device;
        // 获取用于连接目标设备的BluetoothSocket
        try {
            // MY_UUID是应用程序的UUID字符串,服务器代码也需要使用相同的UUID
            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            // 处理异常
        }
        mmSocket = tmp;
    }

    public void run() {
        // 连接成功后,取消设备发现
        // mBluetoothAdapter.cancelDiscovery();

        try {
            // 发起连接
            mmSocket.connect();
        } catch (IOException connectException) {
            // 处理连接异常
            try {
                mmSocket.close();
            } catch (IOException closeException) {
                // 处理关闭异常
            }
            return;
        }

        // 连接成功,开始数据传输
        // ...
    }

    // 关闭连接
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) {
            // 处理关闭异常
        }
    }
}