Android蓝牙输入流接收不完整的数据

时间:2017-06-01 11:48:08

标签: android bluetooth

我发送字符串" A:22.656565,76.545454#"通过bluetooth.BUT在接收时间只需要" "在第一时间,然后采取剩余的字符串,即#34; A:22.656565,76.545454#"。我不知道为什么会发生这种情况?任何帮助,将不胜感激。这是我的代码::

private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket, String socketType) {
        //Log.d(TAG, "create ConnectedThread: " + socketType);
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        try {
            tmpIn =  socket.getInputStream();
            tmpOut =  socket.getOutputStream();
        } catch (IOException e) {
            //Log.e(TAG, "temp sockets not created", e);
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
        mState = STATE_CONNECTED;
    }

    String received="" ;
    public void run() {
        //Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[1024];
        int bytes;
        while (mState == STATE_CONNECTED) {
            try {
                bytes = mmInStream.read(buffer);
                received += new String(buffer, "UTF8");
                received = received.replaceAll("\\p{C}", "");
                if (received.contains("*")) {
                    received = received.substring(0, received.indexOf("*"));
                    Log.e("FOUND", ": " + received);
                    mHandler.obtainMessage(MESSAGE_READ, bytes, -1, received).sendToTarget();
                    received = "";
                    buffer = new byte[1024];
                }
            } catch (IOException e) {
                //Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }

    }
    public void write(byte[] buffer) {
        try {
            //Log.d("Filter","Sending Data inside write3");
            mmOutStream.write(buffer);
            Log.e("FOUND456", ": " + buffer);
            mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, buffer).sendToTarget();
        } catch (IOException e) {
            //Log.e(TAG, "Exception during write", e);
        }
    }

    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) {
            //Log.e(TAG, "close() of connect socket failed", e);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

听起来接收数据有一点延迟,这并不罕见。当接收到完整数据或超时时,您应该在循环中读取输入流中的数据