开发者

BluetoothChat doesn't work

Hello I want to make conversation between android devices. I use BluetoothChat to do this but it doesn't work I can't read correctly data from another device.

Conversation is :

Me: privet

Device: p Device: rivet

Can you help me?

private class ConnectedThread extends Thread {

    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket) {
        Log.d(TAG, "create ConnectedThread");
        mmSocket = socket;
        //InputStream tmpIn = n开发者_C百科ull;
        OutputStream tmpOut = null;
        BufferedInputStream tmpIn=null;

        int INPUT_BUFFER_SIZE=32;
        // Get the BluetoothSocket input and output streams
        try {
            //tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
            tmpIn = new BufferedInputStream(socket.getInputStream(),INPUT_BUFFER_SIZE);

        } catch (IOException e) {
            Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[1024];
        int bytes;

        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream

              bytes = mmInStream.read(buffer);
                // Send the obtained bytes to the UI Activity
                mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
                        .sendToTarget();
            } catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }


The fix for the solution was to create the string in the connected thread, directly after calling read() on the InputStream, and then passing the string back to the main thread for display. For whatever reason, passing the byte array between threads led to significant repetition and data loss.

Modified run() code:

public void run() {
    byte[] buffer = new byte[256];  // buffer store for the stream
    int bytes; // bytes returned from read()

    // Keep listening to the InputStream until an exception occurs
    while (true) {
        try {
            // Read from the InputStream
            bytes = mmInStream.read(buffer);
            String readMessage = new String(buffer, 0, bytes);
            // Send the obtained bytes to the UI Activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
    }
}

And the handler reception:

case MESSAGE_READ:
        // Read in string from message, display to mainText for user
        String readMessage = (String) msg.obj;
        if (msg.arg1 > 0) {
            mainText.append(readMessage);
        }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜