如何使用蓝牙和ObjectOutputStream以及ObjectInputStream在Android和PC之间传输对象?

时间:2013-06-05 09:41:27

标签: android bluetooth objectinputstream objectoutputstream bluecove

我在使用BT实现PC和Android之间的通信时遇到了问题。我有一个应用程序,它可以在WIFI通信上正常工作,使用标准的Java Socket及其流。我正在尝试添加Bt通信。打开流的Android端代码使用标准的BluetoothSocket(建立通信,没关系):

mOos = new ObjectOutputStream(btSocket.getOutputStream());
mOos.flush();
mOis = new ObjectInputStream(btSocket.getInputStream());

在PC端我使用Bluecove 2.1。

mOos = new ObjectOutputStream(mStreamConn.openOutputStream());
mOos .flush();
mOis = new ObjectInputStream(mStreamConn.openInputStream());

Streams正确初始化。我正在从android向PC发送初始消息

protected synchronized void sendAwaitingMsg() throws IOException {
    Message msg;
    while((msg = mOutgoingMsgQueue.poll()) != null) {
        mOos.writeObject(msg);
    }
    mOos.flush();
}

然后尝试在PC端阅读

protected void getIncomingMsg() throws IOException, ClassNotFoundException {
    if(mOis.available() > 0) {
        Message msg = (Message)mOis.readObject();

        if(msg.mControlHeader > 0) {
            mKeepRunning = false;
        } else {
            msg.setHandlerId(mId);
            mConnectionManager.acceptNewMessage(msg);
        }
    }
}

但是mOis.available()始终为0,这意味着它不接收发送消息。我的Message对象类:

public class Message extends LinkedHashMap implements Serializable, Comparable {
static final long serialVersionUID = 10275539472837495L;

protected long mHandlerId;
protected int mType;
protected int mPriority;
public int mControlHeader = 0;



public int getType() {
    return mType;
}

public void setType(int type) {
    this.mType = type;
}

public long getHandlerId() {
    return mHandlerId;
}

public void setHandlerId(long handlerId) {
    this.mHandlerId = handlerId;
}

public int getPriority() {
    return mPriority;
}

public void setPriority(int priority) {
    mPriority = priority;
}

@Override
public int compareTo(Object o) {
    return mPriority - ((Message)o).mPriority;
}

}

标准java套接字上的相同操作和网络通信就像魅力一样。问题在哪里?

1 个答案:

答案 0 :(得分:1)

我在android和PC之间的bluetooh通信方面遇到了类似的麻烦。我终于找到了一些关于bluecove(java中蓝牙库的实现)的信息,以及以下链接中的一个很好的评论示例:

http://fivedots.coe.psu.ac.th/~ad/jg/blue4/blueCoveEcho.pdf

这里有另一个例子,但没有使用bluecove:

http://fivedots.coe.psu.ac.th/~ad/jg/blue1/blueEcho.pdf

我希望它可以帮到你。