Java Android-如何监听蓝牙输出流被清空

Java Android-如何监听蓝牙输出流被清空,java,android,bluetooth,callback,outputstream,Java,Android,Bluetooth,Callback,Outputstream,我有两个线程可以连续管理BluetoothSocket流上的i/O操作 对于输入,没有问题。。read()方法被阻塞,一切正常 对于输出。。问题来了 public void write(final byte[] buffer) { synchronized (this) { try { this.mOutStream.write(buffer); this.mHandler.sendEmptyMessage(Constant

我有两个线程可以连续管理BluetoothSocket流上的i/O操作

对于输入,没有问题。。read()方法被阻塞,一切正常

对于输出。。问题来了

public void write(final byte[] buffer) {
    synchronized (this) {
        try {
            this.mOutStream.write(buffer);
            this.mHandler.sendEmptyMessage(Constants.MESSAGE_SENT);
        } catch (IOException e) {
            Log.e(LOGTAG, "Exception during write", e);
        }
    }
}
我使用上面的代码在输出流上编写消息。它是在线程实例上同步的,这样其他任何人都无法竞争性地在缓冲区上写入

问题如下:如果我尝试写两条消息,一条紧接着另一条,第一条消息似乎被接收设备跳过

阅读OutputStream.write(字节[])的功能,我了解其主要原因:这就像调用OutputStream(字节[],0,长度),因此“0”偏移量将覆盖上一条消息

但我不能在每次需要按顺序写两封邮件时设置计时器或超时,只是为了确保同时收件人已经阅读了第一封邮件

我想要更多,像这样的东西:

int offset = 0;

this.mOutputStream.setOnStreamEmptiedCallback(new OnStreamEmptiedCallback() {

    public void onStreamEmptied() {
        this.offset = 0;
    }

});

public void write(byte[] buffer) {
    this.mOutputStream.write(buffer, 0, buffer.length);
    this.offset += buffer.length;
}
我知道
setOnStreamOptiedCallback
不存在,但是。。有没有类似的方法?可以确保我永远不会覆盖流内容吗

谢谢大家。

flush()应该可以解决您的问题

this.mOutStream.write(buffer);
this.mOutStream.flush();