实现Android两个手机之间蓝牙通讯

作为一名经验丰富的开发者,我将教会你如何实现Android两个手机之间的蓝牙通讯。在开始之前,我们需要明确整个流程,并指导你在每个步骤中需要做什么。

整体流程

我们首先来看一下整个实现过程的流程图,如下所示:

erDiagram
    participant Android1
    participant Android2
    Android1 -- Android2 : 建立蓝牙连接
    Android1 -- Android2 : 传输数据

从流程图中可以看出,我们需要先建立蓝牙连接,然后进行数据传输。下面我们将详细介绍每个步骤。

步骤一:建立蓝牙连接

在这一步中,我们需要在两个Android设备上分别实现蓝牙连接的功能。具体步骤如下:

  1. 在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  1. 在Activity中初始化蓝牙适配器:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  1. 检查蓝牙是否可用,并请求打开蓝牙:
if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
  1. 搜索其他设备并选择要连接的设备,然后建立蓝牙连接:
private final BroadcastReceiver discoveryReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // 选择要连接的设备
            if (device.getName().equals("另一个手机的名称")) {
                // 建立蓝牙连接
                ConnectThread connectThread = new ConnectThread(device);
                connectThread.start();
            }
        }
    }
};

// 开始搜索设备
bluetoothAdapter.startDiscovery();
registerReceiver(discoveryReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));

至此,我们已经成功建立了蓝牙连接。

步骤二:传输数据

在成功建立蓝牙连接后,我们需要实现数据的传输。具体步骤如下:

  1. 在连接成功后的线程中,获取输入输出流,并将数据写入输出流:
private class ConnectedThread extends Thread {
    private final BluetoothSocket socket;
    private final InputStream inputStream;
    private final OutputStream outputStream;

    public ConnectedThread(BluetoothSocket socket) {
        this.socket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        inputStream = tmpIn;
        outputStream = tmpOut;
    }

    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;

        while (true) {
            try {
                // 读取输入流中的数据
                bytes = inputStream.read(buffer);
                // 处理接收到的数据
                // ...
            } catch (IOException e) {
                e.printStackTrace();
                break;
            }
        }
    }

    public void write(byte[] buffer) {
        try {
            // 将数据写入输出流
            outputStream.write(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 启动连接后的线程,传输数据
ConnectedThread connectedThread = new ConnectedThread(socket);
connectedThread.start();
connectedThread.write(data.getBytes());

至此,我们已经成功实现了Android两个手机之间的蓝牙通讯。

总结

在本文中,我们学习了如何通过蓝牙实现Android两个手机之间的通讯。我们首先建立了蓝牙连接,然后进行了数据的传输。希望这篇文章能帮助你理解并实现这一功能。

代码参考:

  • [Android 开发者官网](
  • [GitHub - Bluetooth Chat Sample](