BT を使用して PC と android 間の通信を実装するときに問題が発生しました。標準のJavaソケットとそのストリームを使用して、WIFI通信で正しく動作するアプリケーションがあります。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());
ストリームは適切に初期化されます。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 であり、送信メッセージを受信しないことを意味します。私のメッセージ オブジェクト クラス:
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 ソケットでの同じ操作と、ネットワーク通信は魅力のように機能します。問題はどこだ?