我在使用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套接字上的相同操作和网络通信就像魅力一样。问题在哪里?
答案 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
我希望它可以帮到你。