0

我面临以下问题:我正在通过蓝牙插座连接两台设备,一台平板电脑和一台蓝牙设备,如阅读器条形码,到目前为止还可以,问题是,当蓝牙设备读取条形码并发送它到平板电脑,条形码有时分两部分发送,例如,如果我读取内容为“212154521212”的条形码,平板电脑收到“2121”,在“54521212”之后,任何人都知道告诉我应该怎么做才能避免这个?

先谢谢了。

我从蓝牙设备读取数据的代码:

[代码] 私有类 ConnectedThread 扩展 Thread {

    private final InputStream mmInStream;
    private BluetoothSocket socket;

    public ConnectedThread(BluetoothSocket socket) {
        this.socket = socket;

        InputStream tmpIn = null;

        try {

            tmpIn = socket.getInputStream();

        } catch (IOException e) {
            new LogDeErrosRodesTablet(e);
            Log.e(TAG, e.getMessage());
            Log.e(TAG, "Erro no construtor da classe ConnectedThread.");

        }

        mmInStream = tmpIn;
    }

    public void run() {     
        // continua lendo o inputstream até ocorrer um erro

        while (true) {

            int read = 0;
            byte[] buffer = new byte[128];

            do {

                try {

                    read = mmInStream.read(buffer);
                    Log.e(TAG, "read: " + read);
                    final String data = new String(buffer, 0, read);
                    Log.e(TAG, "data: " + data);

                    //TODO
                    //send data only (bar code) only after read all
                    Bundle bundle = new Bundle();
                    bundle.putString(TelaInserirPedido.CODIGO_BARRAS, data);
                    Message message = new Message();
                    message.what = TelaInserirPedido.MSG_COD_BARRAS;
                    message.setData(bundle);

                    //Send a message with data
                    handler.sendMessage(message);

                } catch(Exception ex) {
                    read = -1;
                    return;
                }

                Log.e(TAG, "inside while.");

            } while (read > 0);

            Log.e(TAG, "outside of while.");
        }

    }

    public void cancel () {
        try {
            socket.close ();
        } catch ( IOException e) { }
    }

}

[/代码]

4

2 回答 2

1

这不是蓝牙错误。蓝牙设备正在将所有数据发送到您的应用程序,但您在接收到所有数据之前正在读取流。如果您知道数据的确切长度,则可以在读取之前检查流上可用的字节数;您可以连接所有读取的结果,直到达到已知终点。或者您可以设置任意时间延迟,并希望在该时间完成传输。

您将在收集输入字符串的 while 循环之后创建 Bundle 和 Message,因为在该循环完成之前您不知道整个字符串。(除非您期望一个连接中有多个字符串,在这种情况下,您需要更复杂的代码来处理部分数字)。

于 2015-07-21T20:55:08.717 回答
0

使用 OutputStream.flush() 强制发送所有数据。

于 2012-12-13T13:48:23.777 回答