我在使用BT实现PC和android之间的通信时遇到了一个问题,我有一个应用程序可以在WIFI通信上正常工作,使用标准的java Socket及其流。我正在尝试添加Bt通讯。Android端打开流的代码使用标准的BluetoothSocket(建立通信,这是ok的):
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());
流被正确初始化。我正在从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,这意味着它不接收发送消息。My 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套接字上,和网络通信就像一个魅力。问题在哪里?
我在android和PC之间的蓝牙通信中也遇到过类似的问题。我终于找到了一些关于bluecove(在java中实现蓝牙库)的信息,并在以下链接中提供了一个很棒的注释示例:
http://fivedots.coe.psu.ac.th/广告/詹/blue4/blueCoveEcho.pdf
这里有另一个例子,但没有使用bluecove:
http://fivedots.coe.psu.ac.th/广告/詹/蓝天航空公司/blueEcho.pdf