3

短くするだけです。3 つのデバイスに接続し、3 つすべてから同時にデータを読み取りたいと考えています。私は1つに接続する方法を知っており、そこからデータを読み取ることができますが、他の2つを接続してそれらから読み取ることが必要です.任意の提案、または私が従うことができる他の例.

これは私のものに似ていますが短いコードの一部です。このコードは、Mac を使用して 1 つのデバイスに接続できます。では、これを変更して 3 つのデバイスに同時に接続し、それらが送信しているデータを表示するにはどうすればよいでしょうか?

私のプロジェクトのこの部分で立ち往生しているため、本当に必要なのを助けてください。助けてくれてありがとう。

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 に答える