通过蓝牙发送的数据会多次出现,同时继续接收新数据

时间:2014-04-26 01:30:00

标签: java android bluetooth android-bluetooth

我正在尝试构建一个Android客户端应用程序,该应用程序使用蓝牙将有关用户执行的手势的数据发送到Java服务器。 当用户执行手势时,应用程序会将有关它的数据发送到电脑 例如(android client send) 5:-24:2(java server receive) 5:-24:2
只要手势在它们之间执行很长的范围,代码就可以正常工作。

问题是当应用程序以非常快的速度发送数据时(例如,因为用户执行了滚动,因此为每个onScroll(...)调用了onTouchEvent(...)。) 然后一条特定的消息被卡住了:

(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck)
...

java服务器端读取代码:

private StreamConnection mConnection;
public void run() {
    try {
        InputStream inputStream = mConnection.openInputStream();
        System.out.println("waiting for input");
        byte[] buffer = new byte[BUFFER_SIZE];

        while (true) {
            inputStream.read(buffer);
            String command = new String(buffer).trim();
            System.out.println(command);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

android客户端写入方:

    private final OutputStream mmOutStream;
    String msg = "5:-24:2";
    byte[] msgByte = msg.getBytes();
    mmOutStream.write(msgByte); 

1 个答案:

答案 0 :(得分:0)

我做的一个主要错误是使用相同的bufferinputStream.read(buffer)收到不同长度的数据。
我做了以下更改,解决了许多问题。

  int length;
  while (true) {
        length = inputStream.read(buffer);
        String command = new String(buffer, 0, length);
        System.out.println(command);
    }