私はここでいくつかのスレッドを通過していますが、私が走っている問題の答えを見つけられませんでした。アンドロイドブルートゥースチャットアプリ(デバイスが直ちに接続を失う)
マイセットアップ: 私は、アンドロイドのNexus S電話と通信するための仮想シリアルポートとして使用しているMac PCを持っています。携帯電話でブルートゥースのチャットアプリを実行し、私がセットアップしたvirt commと話すためにそれをクライアントとして使用します。
最初は、2つのアンドロイド携帯電話でbluetoothチャットアプリを試してみました。私はテキストを前後に送ることができます。
私の使用例: 私はRFidタグを読み取り、データをアンドロイド携帯電話に送信して情報を収集しています。
現在、自分のPCを使用して自分のデバイスを表現しています。問題には、[OK]
++++++++++++++++++ 、
私は自分の携帯電話からPCに接続しようと最初に私は、「接続を取得します。 ... "ステータスバーが更新され、15秒後に"私はPCに接続しています "というトーストメッセージが表示されますが、すぐに"デバイスの接続が切断されました "というトーストがあります。ステータスバーが「接続されていません」と表示されます
デバッガをステップ実行すると、Bluetoothチャットアプリケーションの次の部分でエラーが発生したように見えます。私はlogcatで見てみると具体的に、この行(bytes = mmInStream.read(buffer);
は)
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
、I/O例外は、入力ストリームの読み取り()のための "software caused connection abort
" です。
質問: これは私の仮想ポートが正しくセットアップされていないことと関係がありますか? /dev/tty.Nexusで入力を受け取るのを待っています。 screenコマンド@ 9600ボーを使用
それ以外の場合は、何らかの理由で入力ストリームが接続されているソケットが使用できない可能性があります。私はログに記録し、NULLではないようです。私はステップスルーするたびに、ConnectThreadではなく、ConnectedThreadで死にます。
コードの次の部分:特にこの線(mmSocket.connect();
)
public void run() {
Log.i(TAG, "BEGIN mConnectThread");
setName("ConnectThread");
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
connectionFailed();
// Close the socket
try {
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG, "unable to close() socket during connection failure", e2);
}
// Start the service over to restart listening mode
BluetoothChatService.this.start();
return;
}
// Reset the ConnectThread because we're done
synchronized (BluetoothChatService.this) {
mConnectThread = null;
}
// Start the connected thread
connected(mmSocket, mmDevice);
}
ソケット変数によるマルチスレッドにスコープを失っているとソケットの周りに渡されるのだろうか?
ありがとうございました