3

只是为了让它简短。我想连接三个设备并同时读取这三个设备的数据。我知道如何连接到一个,我可以从中读取数据但我想要的是连接另外两个并从中读取。任何建议,或我可以遵循的其他示例。

这是与我的类似但更短的代码的一部分。此代码可以使用 mac 连接到一个设备。那么如何修改这个以同时连接三个设备并显示它们正在发送的数据呢?

请帮助我真的需要它,因为我卡在我项目的这一部分。谢谢您的帮助。

private boolean connected = false;
private BluetoothSocket sock;
private InputStream in;
public void test() throws Exception {
    if (connected) {
        return;
    }
    BluetoothDevice zee = BluetoothAdapter.getDefaultAdapter().
        getRemoteDevice("00:14:C5:A1:02:67");
    Method m = zee.getClass().getMethod("createRfcommSocket",
        new Class[] { int.class });
    sock = (BluetoothSocket)m.invoke(zee, Integer.valueOf(1));
    devicecon.setText("Connecting......");
    sock.connect();
    devicecon.setText("Connected");
    in = sock.getInputStream();
    byte[] buffer = new byte[50];
    int read = 0;
    Log.d("ZeeTest", "++++ Listening...");
    try {
        while (true) {
            read = in.read(buffer);
            connected = true;
            StringBuilder buf = new StringBuilder();
            for (int i = 0; i < read; i++) {
                int b = buffer[i] & 0xff;
                if (b < 0x10) {
                    buf.append("0");
                }
                buf.append(Integer.toHexString(b)).append(" ");
            }
            Log.d("ZeeTest", "++++ Read "+ read +" bytes: "+ buf.toString());
        }
    } catch (IOException e) {}
    Log.d("ZeeTest", "++++ Done: test()");
4

1 回答 1

0

您需要做的就是为每个设备创建一个新线程(我建议为此使用AsyncTask实例而不是实际线程)并调用连接代码片段

BluetoothDevice zee = BluetoothAdapter.getDefaultAdapter().
    getRemoteDevice("00:14:C5:A1:02:67");
Method m = zee.getClass().getMethod("createRfcommSocket",
    new Class[] { int.class });
sock = (BluetoothSocket)m.invoke(zee, Integer.valueOf(1));
devicecon.setText("Connecting......");
sock.connect();

从那个新线程内部。

于 2012-05-11T02:53:16.597 回答